无法从另一个 docker 容器访问 Jenkins docker 容器

Cannot access Jenkins docker container from another docker container

我有两个本地 docker 容器:Jenkins 和 Bitbucket。我似乎无法从 Bitbucket 向 Jenkins 发出 http 请求。但是,我可以从 Jenkins 向 Bitbucket 发出请求。

容器是 运行 这样的:

比特桶:

docker run -v bitbucketVolume:/var/atlassian/application-data/bitbucket --name="bitbucket" -d --add-host host.docker.internal:host-gateway -p 7990:7990 -p 7999:7999 atlassian/bitbucket-server 

詹金斯:

docker run --name=jenkins -d --add-host host.docker.internal:host-gateway -v jenkins_home:/var/jenkins_home  -p 9080:8080 -p 50000:50000 jenkins/jenkins:latest

为了简单和演示目的,我将使用 curl 命令来举例说明该行为。

Jenkins 向 Bitbucket 发出请求,在向 Bitbucket 容器调用 curl 时将获得预期结果:

jenkins@c1f0ec99a73a:/$ curl -v host.docker.internal:7990
*   Trying 172.17.0.1:7990...
* Connected to host.docker.internal (172.17.0.1) port 7990 (#0)

如果反过来,从Bitbucket到Jenkins,是不会成功的:

root@2a350f4d1ff4:/var/atlassian/application-data/bitbucket# curl -v host.docker.internal:8080
* Could not resolve host: host.docker.internal
* Closing connection 0
curl: (6) Could not resolve host: host.docker.internal

问题:我缺少什么配置才能从 Bitbucket 容器与 Jenkins 容器进行通信?

您正在通过 host.docker.internal 进行通信。

这意味着您将通过运行该容器的主机从一个容器转到另一个容器。

为什么不直接从一个容器转到另一个容器而无需提及主机。 这也更好,因为你失去了 host.docker.internal 的依赖(它并不总是适用于所有平台)

可以通过两种方式从一个容器直接转到另一个容器:

docker-compose

将所有容器规范放入 1 个 docker-compose 文件中。然后可以通过 docker-compose 文件

中的服务名称连接到 'other' 容器

使用IP-network

首先创建自己的 docker 网络,并使用第三个容器作为代理服务器 (运行 Nginx)。 然后给每个容器一个IP地址,就可以通过IP连接了。