我目前已经这样设置了docker macvlan:
docker network create -d macvlan --subnet=10.30.140.0/22 --gateway=10.30.143.254 -o parent=br0 NETNAME1
我想为该Docker容器提供一个IP,以便可以从公司内的任何地方访问它,因此,当我尝试这样运行Docker容器时:
docker run --net NETNAME1 -it --ip=10.30.141.43 -p 10.30.141.43:80:4873 --expose=80 verdaccio/verdaccio
我可以从运行容器的主机以外的任何地方访问此IP,但我不确定为什么。我还想使主机端口为80,容器端口为4873。但是,仅当我的URL为http://10.30.141.43:4873
时,我才能访问此端口是否有任何理由不将其重定向到80?
答案 0 :(得分:0)
对于路由问题,主机网络和docker网络之间可能存在一些重叠,请尝试为docker网络使用其他子网,例如192.168.10.0/24
或其他--subnet=10.10.140.0/24.
对于端口映射,请从docker run中删除多余的东西,然后执行-p 80:4873
docker run -d -net NETNAME1 80:4873 verdaccio/verdaccio
测试:
这些命令工作正常,我可以访问主机上的端口80。
docker network create -d macvlan --subnet=10.30.140.0/22 --gateway=10.30.143.254 NETNAME1
docker network ls
docker run -it --rm --net=NETNAME1 --name verdaccio -p 80:4873 verdaccio/verdaccio
docker ps
答案 1 :(得分:-1)
我可以从运行容器的主机以外的任何地方访问此IP,但我不确定为什么。
这是macvlan网络的命名空间功能,请参见https://hicu.be/bridge-vs-macvlan
您的-p
选项的参数不正确,它仅以-p container_port:host_port
的形式使用端口号,因此您需要-p 4873:80
参见https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose