![](/img/trans.png)
[英]Docker-compose: Docker containers can't connect using service names
[英]How to connect to service started using docker-compose/docker in Github Workflow without 'service containers'?
我正在嘗試使用 GitHub Actions 配置 CI,並且我想在工作流場景中重新使用基於“docker-compose”的邏輯/腳本。 在第一步中,我使用“docker-compose”(或 docker)啟動了一些后台服務,在接下來的步驟中,我想使用 host:port 訪問這些后台服務,但它失敗了。 例如:
- name: Start background service
run: docker-compose up -d mysql
- name: Wait and check mysql container is running
run: |
sleep 120
docker ps
- name: Check connection
run: mysql -uroot -ppassword -hlocalhost -p3306
# or
- name: Check connection
run: mysql -uroot -ppassword -hmysql -p3306
# here I get 'could not resolve host' error
在這兩種情況下,我都會遇到連接失敗,盡管連接參數是正確的,並且根據 'docker ps' 我有 'mysql' 容器正在運行並且端口被正確公開。
有什么辦法可以一步到位地到達碼頭集裝箱嗎? 最好不需要在另一個容器中運行步驟的邏輯。
我知道對於此類事情,GitHub Actions 提供“服務”,但我在 docker/docker-compose 中有相當多的邏輯,我真的很想用它來避免重復。
根據GitHub文檔:
您可以使用在工作流中配置的標簽訪問服務容器。 服務容器的主機名會自動映射到標簽名稱。 例如,如果您創建一個標簽為redis 的服務容器,則該服務容器的主機名是redis。
所以我認為在你的情況下你必須連接-hmysql
而不是-hlocalhost
。
假設您在另一個容器中運行所有 MySQL 命令。
要檢查與 MySQL 容器的服務名稱的通信,請連接到 MySQL 容器部署中使用的同一網絡或鏈接您當前的網絡和 MySQL 網絡。 現在,您可以按預期進行通信。
如果您可以發布docker-compose YAML文件,我可以給您正確的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.