这是用于CI服务器设置。 CI没有安装node
之类的工具,仅Docker 。所以我必须在容器中运行测试。
该容器将依次创建另一个容器,以对其进行集成测试。
第一个容器已安装/var/run/docker.sock
,以便它可以创建第二个容器。 两个容器并排。
我的构建步骤如下:
my-app
docker run ..... my-app yarn test
docker run -v /var/run/docker.sock:/var/run/docker.sock ..... my-app yarn test:integration
问题出在集成测试中:
总而言之,第一个容器调用yarn:integration
,它会启动在端口3001上运行应用程序的第二个容器,然后针对第二个容器运行测试。最后,它停止了第二个容器。
问题是我在第一个容器中进行集成测试试图通过localhost:3001
击中第二个容器,但是localhost
不是第二个容器的正确宿主。
考虑到它们并排(而不是一个在另一个容器中),我如何从第一个容器访问第二个容器?</ p>
答案 0 :(得分:1)
localhost
并不指向主机,而是指向容器本身。如果您想到达另一个容器,则需要使用该容器的实际IP,该容器可以通过docker inspect <CONTAINER ID>
和内部端口发现(即,不是< / strong>映射到您主机的主机)。
或者,您可以创建一个user-defined network和connect容器。然后,您将能够使用容器名称作为主机名,例如my-app:3001
。请注意,容器名称是由--name
的{{1}}参数指定的名称。另外,您还需要使用容器的内部端口,而不要使用通过docker run
参数发布的容器。