我试图将Docker容器1(A)上的端口9000绑定到Docker容器2(B)上的端口9000。
我尝试了--net host
选项,但这对我没有帮助。我需要两个容器都位于同一网络(172.17.0.x)上,并且它们的端口绑定类似于使用-p port
标志将一个容器绑定到主机的方式。我尝试使用--expose flag
在A和B上都设置侦听端口,但无法绑定它们。
docker run -p 8080:8080\ # to bind port 8080 on A to port 8080 on the host
-it -d \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
--expose 9000 \ # listening port to communicate with B
<image file>
docker run -p 8081:8081\ # to bind port 8081 on B to port 8081 on the host
-it -d \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
--expose 9000 \ # listening port to communicate with B
<image file>
我想将A的端口9000映射到B的端口9000(或任何其他端口) 谢谢!
答案 0 :(得分:0)
那是不可能的。但是也不需要。如果两个容器都在同一网络上,它们可以互相看到,只需按IP或名称引用它们即可。
要添加重要名称,请使用--name my_memorable_name
作为docker run
的参数,然后就可以开始了。在其他任何Docker容器中使用该容器,您可以按名称引用该特定容器,例如:
curl http://my_memorable_name:8080
这将按预期工作。请记住,容器名称必须唯一。
答案 1 :(得分:0)
您要描述的内容无法与expose
参数一起使用。 --net=host
告诉您的容器在主机网络上运行,以该标记开头的所有容器中的所有端口暴露出来。
您可以创建一个docker网络并将两个容器都连接到它。
示例:
$ docker network create mynetwork --driver bridge
$ docker run -d --name containerA -p 8080:8080 --net=mynetwork <image>:tag
$ docker run -d --name containerB -p 8081:8081 --net=mynetwork <image>:tag
这将为containerA
和containerB
创建一个DNS记录,该记录具有与容器相同的名称,该名称可以从用户定义网络中的任何容器中解析。
因此,现在,如果您想从containerB
中访问containerA
,只需使用容器的名称即可,例如:
curl http://containerB:8080
另一种解决方案是使用docker-compose:
version: '3'
services:
containerA:
image: <image>:<tag>
containerB:
image: <image>:<tag>
随着docker-compose也创建了一个用户定义的网络,您可以按照前面所述的方式访问容器。
在此处详细了解docker-compose和用户定义的网络: https://docs.docker.com/compose/overview/