无法从另一个 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连接了。
我有两个本地 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连接了。