我正在撰写两个容器,一个包含Web服务,另一个包含数据库 这是我的撰写文件:
version: '3.3'
services:
web:
image: microsoft/aspnetcore:1.1
container_name: web
ports:
- 5555:80
links:
- db
db:
image: microsoft/mssql-server-linux:rc1
container_name: db
ports:
- 1533:1433
environment:
- "ACCEPT_EULA=Y"
- "MSSQL_SA_PASSWORD=MyAdminPwd2017"
- "MSSQL_PID=Developer"
因此,从我在web
服务中运行的asp.net核心应用程序,我只需使用db
作为主机名即可访问db
的数据库。但是db
在主机上是不可见的(我有一个默认的桥接网络)。我可以从主机访问我的数据库,如果我检查正在运行的数据库容器并找到它的IP地址,那么我可以连接到<ip>,1533
。
问题是,web
容器和主机都使用存储访问数据库的凭据的文件。所以我需要一种方法来命名db
,这样我就可以从两个世界(在群内和外面,从我的主机)访问
有没有办法实现这一目标?我尝试在我的docker-compose
文件中定义一个主机网络并让两个服务都使用该网络,但我得到一条消息说只有我可以定义一个主机网络。
编辑:试图改进问题标题,但我仍然不相信,欢迎改进
答案 0 :(得分:0)
好的,那么,回答我自己的问题,我想要的是不可能的,至少从今天开始。
有人写了一篇很好的文章,说明为什么我无法实现我想要的目标。话虽如此,它在Windows容器中是可行的,但它可能是一个临时的“限制”。
链接到帖子:https://derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/ 并链接到Docker论坛:https://forums.docker.com/t/access-dockerized-services-via-the-containers-ip-address/21151