如何从一个networking内的另一个docker集装箱引用docker集装箱?

我试图用Confluence和JIRA创build一个服务。

我创build了一个这样的networking:

docker network create --driver bridge atlassian_stack

并在这个networking上发布了一个容器,一个容器8080和8090:

 docker run -it --detach --publish 8080:8080 --net=atlassian_stack --name JIRA cptactionhank/atlassian-jira-software:latest docker run -it --detach --publish 8090:8090 --net=atlassian_stack --name CONFLUENCE cptactionhank/atlassian-confluence:eap 

我可以在本地访问http://localhost:8080 (JIRA)和http://localhost:8090 (Confluence)。

但是,将应用程序链接在一起需要Atlassian产品中的硬编码IP。 Confluence想知道JIRA所在的地方,还有Vica verca。 它似乎没有看到上面的IP地址(这是有道理的),因为它抱怨未解决的DNS对方。

问题是:当应用程序需要一个硬编码的DNS / IP,并且它们驻留在同一个networking中时,我如何正确地将它们引用到另一个networking中?

当多个容器共享一个公共networking时,每个容器可以使用该容器的name来parsing任何其他容器(在同一networking上)。

所以在你的情况下,你应该可以运行docker exec -it JIRA ping CONFLUENCE docker exec -it CONFLUENCE ping JIRA docker exec -it JIRA ping CONFLUENCE ,也可以docker exec -it CONFLUENCE ping JIRA假设ping在这些容器中可用,如果没有的话,你可以执行/附加一个shell到每一个,并安装需要的networking工具( pingtelnetnc等)[ docker exec -it JIRA sh然后在#提示符下, yum install telnet -y根据基本映像的特定发行版yum install telnet -yapt instal -y ]。

如果你只能使用IP地址(而不是主机名/名称),那么你需要在Confluence启动时通过运行nslookup jira或类似的东西来获取它。 下面是一个例子:

 ~ ᐅ docker network create -d bridge www 9e1ab7c25a58fdbdaa1ec46bbcf9c9b37bb6ddc776abe6b2fb47dbb0c100d750 ~ ᐅ docker run -d --name w1 --network www busybox top Unable to find image 'busybox:latest' locally latest: Pulling from library/busybox 03b1be98f3f9: Pull complete Digest: sha256:99ccecf3da28a93c063d5dddcdf69aeed44826d0db219aabc3d5178d47649dfa Status: Downloaded newer image for busybox:latest fb0c198b002559b6ccd7dd145a394592a7258b1a955012aae8c707a5bea70c86 ~ ᐅ docker run -d --name w2 --network www busybox top 13ea6ceb82f7d80d34a8cc3b6ba79bdfcc1d3a5f1df1b5f59a20323db21a7190 ~ ᐅ docker exec -it w1 nslookup w2 Server: 127.0.0.11 Address 1: 127.0.0.11 Name: w2 Address 1: 172.19.0.3 w2.www ~ ᐅ docker exec -it w1 sh / # nslookup w2 | awk '/^Address.* w2.*/ { print $3 ; exit }' 172.19.0.3 / # exit