【问题标题】:How to connect to service started using docker-compose/docker in Github Workflow without 'service containers'?如何在没有“服务容器”的情况下在 Github Workflow 中使用 docker-compose/docker 连接到服务?
【发布时间】:2021-12-26 15:10:46
【问题描述】:

我正在尝试使用 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”容器正在运行并且端口被正确暴露。

有什么方法可以让我从一个步骤到达 docker 容器? 最好不需要在另一个容器中运行 step 的逻辑。

我知道 GitHub Actions 为此类事情提供“服务”,但我在 docker/docker-compose 中有相当多的逻辑,我真的很想用它来避免重复。

【问题讨论】:

    标签: docker github docker-compose github-actions


    【解决方案1】:

    根据GitHub docs:

    您可以使用您在工作流中配置的标签访问服务容器。服务容器的主机名会自动映射到标签名称。比如你创建一个标签为redis的服务容器,服务容器的主机名就是redis。

    所以我猜你必须连接-hmysql 而不是-hlocalhost

    【讨论】:

    • 不幸的是,当我使用 'mysql' 主机时,我得到相同的结果,将更新问题
    【解决方案2】:

    假设您在另一个容器中运行所有 MySQL 命令。

    要检查与 MySQL 容器的服务名称的通信,请连接到 MySQL 容器部署中使用的同一网络或链接您当前的网络和 MySQL 网络。现在,您可以按预期进行通信了。

    如果你可以发布 docker-compose YAML 文件,我可以给你正确的想法。

    【讨论】:

      猜你喜欢
      • 2022-12-09
      • 2018-08-19
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多