簡體   English   中英

無法從另一個 docker 容器訪問 Jenkins docker 容器

[英]Cannot access Jenkins docker container from another docker container

我有兩個本地 docker 容器:Jenkins 和 Bitbucket。我似乎無法從 Bitbucket 到 Jenkins 發出 http 請求。但是,我可以從 882586203188688 發出請求

容器是這樣運行的:

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 

Jenkins:

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 ,將在調用 curl 到 Bitbucket 容器時得到預期的結果:

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 進行通信。

這意味着您將通過運行容器的主機從一個容器轉到另一個容器。

為什么不直接從一個容器到另一個容器的 go 而不提及主機。 這也更好,因為你失去了 host.docker.internal 的依賴(它並不總是適用於所有平台)

從一個容器直接轉到另一個容器可以通過兩種方式完成:

docker-compose

將所有容器規格放入 1 docker-compose 文件中。 然后可以通過 docker-compose 文件中的服務名稱連接到“其他”容器

使用IP.網絡

首先創建您自己的 docker.network 並擁有第三個容器 function 作為代理服務器(運行 Nginx)。 然后給每個容器一個IP地址,就可以通過IP連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM