如何通过HTTP攻击从另一个通过/var/run/docker.sock挂载的容器创建的容器?

时间:2018-07-18 21:11:13

标签: node.js docker yarnpkg

这是用于CI服务器设置。 CI没有安装node之类的工具,仅Docker 。所以我必须在容器中运行测试。

该容器将依次创建另一个容器,以对其进行集成测试。

第一个容器已安装/var/run/docker.sock,以便它可以创建第二个容器。 两个容器并排

我的构建步骤如下:

  1. 克隆源代码
  2. 构建docker映像并将其标记为my-app
  3. 运行单元测试docker run ..... my-app yarn test
  4. 运行集成测试,启动容器docker run -v /var/run/docker.sock:/var/run/docker.sock ..... my-app yarn test:integration

问题出在集成测试中:

总而言之,第一个容器调用yarn:integration,它会启动在端口3001上运行应用程序的第二个容器,然后针对第二个容器运行测试。最后,它停止了第二个容器。

问题是我在第一个容器中进行集成测试试图通过localhost:3001击中第二个容器,但是localhost不是第二个容器的正确宿主。

考虑到它们并排(而不是一个在另一个容器中),我如何从第一个容器访问第二个容器?<​​/ p>

1 个答案:

答案 0 :(得分:1)

容器中的

localhost并不指向主机,而是指向容器本身。如果您想到达另一个容器,则需要使用该容器的实际IP,该容器可以通过docker inspect <CONTAINER ID>内部端口发现(即,不是< / strong>映射到您主机的主机)。

或者,您可以创建一个user-defined networkconnect容器。然后,您将能够使用容器名称作为主机名,例如my-app:3001。请注意,容器名称是由--name的{​​{1}}参数指定的名称。另外,您还需要使用容器的内部端口,而不要使用通过docker run参数发布的容器。