无法从swarm和主机内部连接Docker容器

无法从swarm和主机内部连接Docker容器,docker,asp.net-core,docker-compose,docker-for-windows,Docker,Asp.net Core,Docker Compose,Docker For Windows,我正在编写两个容器,一个包含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

我正在编写两个容器,一个包含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
(我有一个默认的网桥网络)。如果我检查正在运行的db容器并找到它的ip地址,那么我确实可以从主机访问我的数据库,然后我可以连接到
,1533

问题是,存储访问数据库的凭据的文件被
web
容器和主机使用。因此,我需要一种方法来命名
db
,这样我就可以从两个世界访问(在swarm内部和外部,从我的主机)

有没有办法做到这一点?我尝试在我的
docker compose
文件中定义一个主机网络,并让这两个服务都使用该网络,但我收到一条消息说只能定义一个主机网络


编辑:试图改进问题标题,但我仍然不确信,欢迎改进

好的,所以,回答我自己的问题,我想要的是不可能的,至少从今天开始

有人写了一篇关于为什么我不能实现我想要的东西的好文章。话虽如此,它在Windows容器中是可行的,但它可能是一个暂时的“限制”

链接至帖子:
并链接到Docker论坛:

从主机上,您可以使用“localhost:”访问db。您可以在主机中创建从“localhost:”到“db”的别名。那对你有帮助吗?通过使用主机网络,您不会获得容器网络隔离的好处。谢谢,通过在我的主机(Windows)中创建别名,您的意思是在
C:\Windows\System32\drivers\etc\hosts
中创建一个条目,对吗?我真的不想那样做。如果我不关心容器网络隔离,我希望容器和主机都在同一个网络中,该怎么办?我能做到吗?在Docker内部,dns解析发生在Docker引擎中,用于容器,并使用外部dns服务器用于未解析的名称。主机不知道Docker引擎的DNS数据库。在您的情况下,您希望容器和主机具有相同的DNS数据库。最简单的方法是托管alias,这似乎对您不可用。我能想到的一种方法是使用外部dns服务器(如Consor),将容器中的服务发布到外部服务器,并让容器和主机都使用该dns服务器。谢谢,IP地址呢?。当我启动Windows容器时,每个容器都有一个IP地址,我可以从另一个容器连接,也可以从主机本身连接。我可以用Linux(常规)容器实现吗?网桥网络中的容器ip地址可以从主机访问。对于覆盖网络,无法从主机访问容器ip地址。对于Linux和Windows容器,此行为是相同的。