sql-server - 为什么我的应用程序 docker 没有连接到我的数据库 docker?
问题描述
这是我的docker-compose.yml
文件:
version: "3.9"
services:
api:
image: nefcanto/dotnet-dev
restart: always
container_name: DotNetApi
working_dir: /Api
environment:
- HolismProjectsRoot=/HolismDotNet
volumes:
- /HolismDotNet/Framework:/HolismDotNet/Framework
- /HolismDotNet/Api:/HolismDotNet/Api
- .:/Api
ports:
- "5000:5000"
command: >
sh -c
"
dotnet build
&& dotnet Api/bin/Holism.Geo.Api.dll
"
depends_on:
- "sql"
sql:
image: mcr.microsoft.com/mssql/server:2019-latest
restart: always
container_name: Sql
volumes:
- ./Database:/var/opt/mssql
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=lksU2o412f7tBj58t07B
- MSSQL_PID=Express
ports:
- 1433:1433
command: >
sh -c
"
tail -f /dev/null
"
如您所见,我正在开发.NET Core
应用程序并且创建了两个容器。这是我的应用程序使用的连接字符串:
data source=sql,1433; initial catalog=Geo; user id=sa; password=password_here
我用sql
和进行了测试Sql
。但是我的应用程序容器看不到我的数据库容器。
我在 linux 上,我可以使用交互式 shell 连接到我的数据库。
docker exec -it DotNetApi sh -c
# /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P password_here
> select newid();
> go;
------------------------------------
2FCD5E38-B526-4B76-AB74-A8DF9971D103
(1 rows affected)
我应该怎么办?
解决方案
请记住,Docker 仅将 container_name:dynamic_Ip 映射到用户创建的网络上。
显然,您使用的是默认桥接网络,因此您的应用程序将无法找到 sql 或 Sql 或其他任何内容。
你有两种不同的方法来解决这个问题:
docker network create -d bridge my-bridge-network
并在该网络上运行这些容器。运行容器时,您必须 --link 它们,如文档所示。
推荐阅读
- javascript - 有没有办法在使用 php 的浏览器中使用 ajax 或类似方法来抓取呈现某些数据的页面
- android - Python/Kivy 应用程序到 Windows 上的 apk - 安装虚拟机后该怎么办?
- android - 打盹模式与网络状态
- angular - 如何获得增量后数字的总值
- json - 在 React-Native 中访问 Json 对象数组
- angular - ionic3 通过 `radio` 更改页面数据
- c# - 将事件设置为数组c#中的对象
- python - 句子含义相似度和频率
- hyperledger-fabric - 为什么 Hyperledger Fabric 通过编译源代码而不是二进制来安装链代码?
- node.js - React 中的模态不工作。显示错误