无法与群集内的Docker容器和主机连接

问题描述:

我正在编写两个容器,其中一个使用Web服务,另一个使用数据库。
这里是我撰写的文件:无法与群集内的Docker容器和主机连接

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" 

所以,从我的asp.net应用程序的核心在web服务运行,我可以在db只是用db作为主机访问数据库。但db是不可见的从主机(我有一个默认桥网络)。如果我检查运行的db容器并找到它的ip地址,我可以从主机访问我的数据库,然后我可以连接到<ip>,1533

问题是,web容器和主机都使用存储访问数据库凭据的文件。所以我需要一种方法来命名db,所以我可以从两个世界访问(在群体内外,从我的主机)

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

编辑:试图改善问题的标题,但我还是不相信,改进欢迎

+0

从您的主机,您可以使用Access数据库“本地主机:”。您可以在主机中创建一个别名,从“localhost:”到“db”。这会帮助你吗?通过建立主机网络,您不会受益于容器网络隔离。 – Sreeni

+0

谢谢,通过在我的主机(Windows)中创建别名,您的意思是在'C:\ Windows \ System32 \ drivers \ etc \ hosts'中创建一个条目,对吧?我真的不喜欢这样做。如果我不关心容器网络隔离并且希望容器和主机位于同一网络中,该怎么办?我可以做到吗? – sebagomez

+0

在Docker内部,dns解析发生在Docker引擎的容器中,并为未解析的名称使用外部dns服务器。主机不知道Docker引擎的DNS数据库。在你的情况下,你希望容器和主机具有相同的数据库的DNS数据库。最简单的方法是主机别名,这似乎不适合你。我能想到的一种方式是使用外部DNS服务器(如consul)并将容器中的服务发布到外部服务器,并使容器和主机都使用该DNS服务器。 – Sreeni

好了,所以,要回答我的问题,我想是不是更多钞票,至少到今天为止。

有人写了一篇很好的文章,说明为什么我不能达到我想要的。话虽如此,它在Windows Containers中是可行的,但它可能是一个暂时的“限制”。

链接的帖子:https://derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/ 并链接到泊坞窗论坛:https://forums.docker.com/t/access-dockerized-services-via-the-containers-ip-address/21151