[英]Cannot access REST endpoint in docker container from another docker container
[英]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 的依賴(它並不總是適用於所有平台)
從一個容器直接轉到另一個容器可以通過兩種方式完成:
將所有容器規格放入 1 docker-compose 文件中。 然后可以通過 docker-compose 文件中的服務名稱連接到“其他”容器
首先創建您自己的 docker.network 並擁有第三個容器 function 作為代理服務器(運行 Nginx)。 然后給每個容器一個IP地址,就可以通過IP連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.