Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何通过HTTP访问从另一个安装了/var/run/docker.sock的容器创建的容器?_Node.js_Docker_Yarnpkg - Fatal编程技术网

Node.js 如何通过HTTP访问从另一个安装了/var/run/docker.sock的容器创建的容器?

Node.js 如何通过HTTP访问从另一个安装了/var/run/docker.sock的容器创建的容器?,node.js,docker,yarnpkg,Node.js,Docker,Yarnpkg,这是CI服务器设置的一个示例。CI没有安装节点之类的工具,只有Docker。所以我必须在容器中运行测试 这个容器将创建第二个容器来运行集成测试 第一个容器已装入/var/run/docker.sock,以便创建第二个容器。两个容器并排放置 我的构建步骤如下所示: 克隆源代码 构建docker图像并将其标记为我的应用程序 运行单元测试docker运行。。。。。我的应用程序纱线测试 运行启动容器的集成测试。docker run-v/var/run/docker.sock:/var/run/docke

这是CI服务器设置的一个示例。CI没有安装节点之类的工具,只有Docker。所以我必须在容器中运行测试

这个容器将创建第二个容器来运行集成测试

第一个容器已装入/var/run/docker.sock,以便创建第二个容器。两个容器并排放置

我的构建步骤如下所示:

克隆源代码 构建docker图像并将其标记为我的应用程序 运行单元测试docker运行。。。。。我的应用程序纱线测试 运行启动容器的集成测试。docker run-v/var/run/docker.sock:/var/run/docker.sock。。。。。我的应用程序测试:集成 集成测试中存在问题:

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

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

如何从第一个容器访问第二个容器,因为它们是并排的,而不是在另一个容器中?

容器中的localhost不指向主机,而是指向容器本身。如果您想访问另一个容器,则需要使用该容器的实际IP,该IP可由docker inspect和内部端口发现,即不是映射到主机的端口


或者,您可以创建一个容器,并将容器添加到其中。然后您将能够使用容器名称作为主机名,例如my app:3001。注意,容器名称是docker run的-name参数指定的名称。您还需要使用容器的内部端口,而不是使用-p参数发布的端口。

当您说您的第一个容器调用纱线:集成并启动第二个容器时,第二个容器是否在第一个容器中运行?不,它通过/var/run/docker.sock。我将更新它我更新了我的问题以更好地澄清我的问题我更新了我的问题以指定第二个容器不在第一个容器内,而是通过/var/run/docker.sock并排运行file@ChristopherFrancisco,是的,我的回答适用于这种情况。我不知道为什么会被否决。好吧,听起来像是从第一个容器开始,在启动第二个容器后,我会在容器ID上运行docker inspect,选择IP并将其注入到我的集成测试中。这就是你的意思吗?@ChristopherFrancisco,或者你可以使用用户定义的网络。请看我的最新答案。