从Docker容器内部访问Docker端口

4

我有一个运行在Docker容器内部的服务,端口号为1234。现在我想从同一个Docker容器内部运行测试该服务的代码,使用:

`docker exec`

但是我无法这样做,因为我的测试无法连接到它。 我使用Docker $HOSTNAME变量作为服务地址。

docker exec SERVICE_NAME /bin/sh -c "nc -vz $HOSTNAME 1234"

返回

连接被拒绝

docker exec SERVICE_NAME /bin/sh -c "netstat -tulpn"

返回空行

我也尝试过使用0.0.0.0代替$HOSTNAME

我已经考虑过从其他容器运行测试,但对我来说不是很方便,因为有两个原因: 1)我在使用带有docker的gitlab ci。 2)我的服务链接到许多其他docker服务,例如mongodb、rabbit等。

谢谢


docker exec SERVICE_NAME /bin/sh -c "nc -vz $HOSTNAME 1234" 这行代码会做什么?你能ping通"$HOSTNAME"吗?这个主机是否在监听端口1234?如果是“容器内部的调用”,那么请将$HOSTNAME替换为localhost - Auzias
1个回答

1
假设您的问题是“是否可以从容器中调用Docker到主机?”
是的,当然可以!与Docker守护程序的通信通过套接字进行。默认情况下,此套接字为unix:///var/run/docker.sock。您的管理容器只需要访问(和权限)此套接字即可。
请注意,Docker守护程序的一个选项(我正在查看-H,--host)允许通过TCP(甚至是fd)进行通信。
然后,您只需要一个Docker客户端(任何Docker API实现)进行通信。

不是精确的,我需要从容器内部调用自身。 - Artem Vedernikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接