在我的github动作工作流中,我运行笑话测试脚本时遇到此错误(ECONNREFUSED)。该测试使用axios连接到我的api,该api在通过docker-compose(在github工作流本身期间创建)引导的容器中运行。该网络只有两个容器:api和postgres。因此,我假设我的测试脚本是在“主机网络”(github工作流)上,但是它无法通过容器的映射端口到达docker网络。
我已将问题缩小如下。当我修改撰写文件以依赖默认网络时(我的撰写文件中不再包含networks:
)
因此,似乎容器从未连接到默认桥网络。
看来我只是错误的范例。阅读以下内容后:https://help.github.com/en/actions/configuring-and-managing-workflows/about-service-containers
我意识到这根本不是GA期望我们实例化容器的方式。看来我应该在工作流文件中使用services:
节点,而不是使用我自己的docker-compose文件中的容器。 ?要尝试...
答案 0 :(得分:0)
所以答案是:
services:
启动您的容器,该容器必须是公共docker映像。如果您的容器基于私有映像或自定义dockerfile,则GA尚不支持。因此,我不必“ docker-compose up”来引导postgres +我的api以进行集成测试,而是:
所以npm run start & npm run <test launch cmds>
。这行得通。
答案 1 :(得分:-1)
这里有几种可能性。
由于使用的是docker compose,因此在启动api容器时,请发布api正在侦听主机的端点。您可以这样做:
version: 3
services:
api:
...
ports:
- "3010:3010"
在您的docker-compose.yml
中。这将发布端口,类似于进行docker run ... ---publish localhost:3010:3010
。参见参考文献:https://docs.docker.com/compose/compose-file/#ports
默认情况下,docker-compose将创建一个名为backend-net_default
的网络。此docker-compose.yml
创建的容器将可以通过此网络访问其他容器。访问网络上其他容器的主机名只是该服务的名称。例如,您的测试可以使用主机api
(假设这是您的api服务的名称)访问api端点,例如:
http://api:3010
这里的一个警告是测试必须在由相同的docker-compose.yml
管理的容器中启动,以便它可以访问公用的backend-net_default
网络。