在docker安装之后,默认情况下您具有3个网络:
docker network lsNETWORK ID NAME DRIVER SCOPEf3be8b1ef7ce bridge bridge localfbff927877c1 host host local023bb5940080 none null local
我试图保持这种简单。因此,如果默认情况下启动容器,它将在网桥(docker0)网络内创建。
$ docker run -d jenkins1498e581cdba jenkins "/bin/tini -- /usr..." 3 minutes ago Up 3 minutes 8080/tcp, 50000/tcp friendly_bell
在詹金斯的dockerfile中,端口
8080和
50000被暴露。这些端口在其桥接网络上为容器打开。因此,该桥接网络中的所有内容都可以访问端口
8080和上的容器
50000。桥接网络中的所有内容都在的私有范围内。
"Subnet":"172.17.0.0/16",如果要从外部访问它们,则必须使用映射端口
-p8080:8080。这会将容器的端口映射到真实服务器(主机网络)的端口。因此,在上访问服务器
8080将路由到port上的网桥
8080。
现在您也有了主机网络。不会将容器网络化。因此,如果您在主机网络中启动容器,它将看起来像这样(这是第一个容器):
ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1efd834949b2 jenkins "/bin/tini -- /usr..." 6 minutes ago Up 6 minutes eloquent_panini1498e581cdba jenkins "/bin/tini -- /usr..." 10 minutes ago Up 10 minutes 8080/tcp, 50000/tcp friendly_bell
区别在于端口。您的容器现在位于主机网络中。因此,如果您
8080在主机上打开端口,则将立即访问该容器。
$ sudo iptables -I INPUT 5 -p tcp -m tcp --dport 8080 -j ACCEPT
我已经
8080在防火墙中打开了端口,当我现在在端口上
8080访问服务器时,我正在访问我的詹金斯。我认为此博客对于更好地理解它也很有用。



