20260512 docker笔记

export和import容器

bash 复制代码
[root@docker ~ 10:10:44]# docker run -d --name httpd1 httpd
60aa85d4d68ff852feacd7439e2c6f7fe7dae9996b8d176a9eaf706497d328fe
[root@docker ~ 10:11:07]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
60aa85d4d68f   httpd     "httpd-foreground"   3 seconds ago   Up 2 seconds   80/tcp    httpd1
[root@docker ~ 10:11:09]# docker export --help

Usage:  docker export [OPTIONS] CONTAINER

Export a container's filesystem as a tar archive

Aliases:
  docker container export, docker export

Options:
  -o, --output string   Write to a file, instead of STDOUT
##将容器导出为一个tar包
[root@docker ~ 10:11:24]# docker export httpd1 -o export_httpd
[root@docker ~ 10:12:07]# ls
allimages.tar    dirA        export_httpd  harbor-offline-installer-v2.9.1.tgz  httpd.tar   porject
anaconda-ks.cfg  Dockerfile  harbor        httpd                                index.html  ssh.centos
[root@docker ~ 10:12:39]# docker import --help

Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

Import the contents from a tarball to create a filesystem image

Aliases:
  docker image import, docker import

Options:
  -c, --change list       Apply Dockerfile instruction to the created image
  -m, --message string    Set commit message for imported image
      --platform string   Set platform if server is multi-platform capable
[root@docker ~ 10:12:53]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
ubuntu-with-stress   latest    0659db69e990   18 hours ago    139MB
httpd                latest    c194ed9b9e8f   3 days ago      117MB
ubuntu               latest    30ba44506a6d   2 weeks ago     100MB
busybox              latest    925ff61909ae   19 months ago   4.42MB
[root@docker ~ 10:13:02]# docker import export_httpd httpd_1:v1
sha256:8c6e0d5248b05c37dd3d03f2db2d999b47c30eef7ebaa592bad9faa7a9bb0521
[root@docker ~ 10:13:48]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
httpd_1              v1        8c6e0d5248b0   7 seconds ago   115MB
ubuntu-with-stress   latest    0659db69e990   18 hours ago    139MB
httpd                latest    c194ed9b9e8f   3 days ago      117MB
ubuntu               latest    30ba44506a6d   2 weeks ago     100MB
busybox              latest    925ff61909ae   19 months ago   4.42MB

docker save 和 docker export 对比:

docker save :将镜像保存为文件,save会保存该镜像的所有元数据和历史记录。

docker export :将容器导出为文件,文件会丢失所有元数据和历史记录,仅保存容器当时的状 态,再次导入会当作全新的镜像。

none和host网络的适用场景

none

none 网络就是什么都没有的网络。挂在这个网络下的容器除了 lo,没有其他任何网卡

bash 复制代码
[root@docker ~ 10:14:41]# docker network ls
NETWORK ID     NAME            DRIVER    SCOPE
6b7a7f98d849   bridge          bridge    local
58d0fcfc22ef   harbor_harbor   bridge    local
f18bc86af02a   host            host      local
7abb49f3f545   none            null      local
[root@docker ~ 11:03:37]# docker run -it --network=none busybox
/ # ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ # hostname
837e62759e45
/ # exit

host

挂在host网络上的容器共享宿主机的network namespace。即容器的网络配置与host网络配置完全一 样。

bash 复制代码
[root@docker ~ 11:05:39]# docker run -it --network=host busybox
/ # ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
    link/ether 00:0c:29:e3:f8:c5 brd ff:ff:ff:ff:ff:ff
3: br-58d0fcfc22ef: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
    link/ether 02:42:44:c6:72:e8 brd ff:ff:ff:ff:ff:ff
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
    link/ether 02:42:f5:c7:4f:dc brd ff:ff:ff:ff:ff:ff
6: vethb845c33@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0
    link/ether e2:8a:7d:8a:41:5b brd ff:ff:ff:ff:ff:ff
/ # ifconfig
br-58d0fcfc22ef Link encap:Ethernet  HWaddr 02:42:44:C6:72:E8
          inet addr:172.18.0.1  Bcast:172.18.255.255  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

docker0   Link encap:Ethernet  HWaddr 02:42:F5:C7:4F:DC
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
          inet6 addr: fe80::42:f5ff:fec7:4fdc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:526 (526.0 B)

ens160    Link encap:Ethernet  HWaddr 00:0C:29:E3:F8:C5
          inet addr:192.168.108.30  Bcast:192.168.108.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee3:f8c5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17803 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29524 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1365075 (1.3 MiB)  TX bytes:11481471 (10.9 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

vethb845c33 Link encap:Ethernet  HWaddr E2:8A:7D:8A:41:5B
          inet6 addr: fe80::e08a:7dff:fe8a:415b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:1672 (1.6 KiB)

/ # hostname
docker
/ # exit

brige网络

bash 复制代码
#先配置yum源用于安装软件
[root@docker ~ 14:04:00]# cd /etc/yum.repos.d/
[root@docker yum.repos.d 14:04:08]# ls
docker-ce.repo  os.repo
[root@docker yum.repos.d 14:04:09]# vim linux.birdge.repo
[centos-openstack-victoria]
name=CentOS 8 - OpenStack victoria
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/cloud/x86_64/openstack-victoria/
enabled=1
gpgcheck=0
[root@docker yum.repos.d 14:06:45]# yum install -y bridge-utils

[root@docker yum.repos.d 14:07:07]# brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.024213d2158d       no
##当前 docker0 上没有任何其他网络设备
[root@docker yum.repos.d 14:08:00]# docker run -itd --name busybox1 busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
481282afbc43: Pull complete
Digest: sha256:1487d0af5f52b4ba31c7e465126ee2123fe3f2305d638e7827681e7cf6c83d5e
Status: Downloaded newer image for busybox:latest
74ff8b9fe84b02aa05ebc1f7de4627d0d9363f82d51ba75b01c001b3cb4aa7d7
[root@docker yum.repos.d 14:08:34]# brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.024213d2158d       no              vethbf629ed
##一个新的网络接口 vethddb2744 被挂到了 docker0 上, vethddb2744 就是新创建容器的虚拟网卡
[root@docker yum.repos.d 14:08:40]# docker exec -it busybox1 sh
/ # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
 valid_lft forever preferred_lft forever
 #容器里的网卡是4号网卡名字叫eth0,对面是5号网卡
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # read escape sequence
[root@docker yum.repos.d 14:10:10]# docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "d53cfc52373a8c647031189b1af435e64ecdadc7de444276fb041f3d3dfecf85",
        "Created": "2026-05-12T14:02:45.886957278+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "74ff8b9fe84b02aa05ebc1f7de4627d0d9363f82d51ba75b01c001b3cb4aa7d7": {
                "Name": "busybox1",  ###容器busybox1
                "EndpointID": "beaf1657e5b59944e0eca0562a2a16f2bab1bb300f718c97f5db3e7473fa4490",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16", #分配给busybox1的172.17.0.2
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]
[root@docker yum.repos.d 14:10:35]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:e3:f8:c5 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.108.30/24 brd 192.168.108.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fee3:f8c5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:13:d2:15:8d brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:13ff:fed2:158d/64 scope link
       valid_lft forever preferred_lft forever
###证明了容器busybox1里的 eth0 连接到了docker0网桥的vethbf629ed 
5: vethbf629ed@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether d2:58:4a:3e:e2:4a brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::d058:4aff:fe3e:e24a/64 scope link
       valid_lft forever preferred_lft forever

自定义容器网络

bash 复制代码
##创建一个软件交换机
[root@docker ~ 14:49:39]# docker network create --driver bridge my_net
e08ed43672c1ed49d9995451e19d99eac55469b05566e0e941be695c6f3c36bf
[root@docker ~ 14:50:13]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-e08ed43672c1         8000.02425288fdee       no
docker0         8000.024213d2158d       no              vethbf629ed
##注意看id是一样的
[root@docker ~ 14:50:20]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
d53cfc52373a   bridge    bridge    local
f18bc86af02a   host      host      local
e08ed43672c1   my_net    bridge    local
7abb49f3f545   none      null      local
##查看my_net的配置信息
[root@docker ~ 14:50:46]# docker network inspect my_net
[
    {
        "Name": "my_net",
        "Id": "e08ed43672c1ed49d9995451e19d99eac55469b05566e0e941be695c6f3c36bf",
        "Created": "2026-05-12T14:50:13.382915297+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    #这里 172.18.0.0/16 是 Docker自动分配的 IP 网段
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
##创建指定ip网段
[root@docker ~ 14:51:14]# docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2
d3c54ceed8230ce88bcd81a9e61291eacf788f74d29c91fbbf29c93acc6bc66d
[root@docker ~ 14:52:50]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-d3c54ceed823         8000.0242b0a13d59       no
br-e08ed43672c1         8000.02425288fdee       no
docker0         8000.024213d2158d       no              vethbf629ed
[root@docker ~ 14:52:57]# docker network inspect my_net2
[
    {
        "Name": "my_net2",
        "Id": "d3c54ceed8230ce88bcd81a9e61291eacf788f74d29c91fbbf29c93acc6bc66d",
        "Created": "2026-05-12T14:52:50.332274914+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.22.16.0/24",
                    "Gateway": "172.22.16.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
[root@docker ~ 14:53:59]# docker run -it --network=my_net2 --name busybox2 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:16:10:02 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.2/24 brd 172.22.16.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # [root@docker ~ 14:55:13]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-d3c54ceed823         8000.0242b0a13d59       no              veth89c3be9
br-e08ed43672c1         8000.02425288fdee       no
docker0         8000.024213d2158d       no              vethbf629ed
[root@docker ~ 14:55:21]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:e3:f8:c5 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.108.30/24 brd 192.168.108.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fee3:f8c5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:13:d2:15:8d brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:13ff:fed2:158d/64 scope link
       valid_lft forever preferred_lft forever
5: vethbf629ed@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether d2:58:4a:3e:e2:4a brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::d058:4aff:fe3e:e24a/64 scope link
       valid_lft forever preferred_lft forever
6: br-e08ed43672c1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:52:88:fd:ee brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-e08ed43672c1
       valid_lft forever preferred_lft forever
7: br-d3c54ceed823: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:b0:a1:3d:59 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.1/24 brd 172.22.16.255 scope global br-d3c54ceed823
       valid_lft forever preferred_lft forever
    inet6 fe80::42:b0ff:fea1:3d59/64 scope link
       valid_lft forever preferred_lft forever
9: veth89c3be9@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-d3c54ceed823 state UP group default
    link/ether 9e:33:23:fa:3d:41 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::9c33:23ff:fefa:3d41/64 scope link
       valid_lft forever preferred_lft forever
[root@docker ~ 14:56:00]# docker run -it --network=my_net2 --ip 172.22.16.8 --name busybox3 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:16:10:08 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.8/24 brd 172.22.16.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # [root@docker ~ 14:57:21]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-d3c54ceed823         8000.0242b0a13d59       no              veth89c3be9
                                                        vethd6c4eec
br-e08ed43672c1         8000.02425288fdee       no
docker0         8000.024213d2158d       no              vethbf629ed
[root@docker ~ 14:57:27]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:e3:f8:c5 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.108.30/24 brd 192.168.108.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fee3:f8c5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:13:d2:15:8d brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:13ff:fed2:158d/64 scope link
       valid_lft forever preferred_lft forever
5: vethbf629ed@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether d2:58:4a:3e:e2:4a brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::d058:4aff:fe3e:e24a/64 scope link
       valid_lft forever preferred_lft forever
6: br-e08ed43672c1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:52:88:fd:ee brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-e08ed43672c1
       valid_lft forever preferred_lft forever
7: br-d3c54ceed823: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:b0:a1:3d:59 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.1/24 brd 172.22.16.255 scope global br-d3c54ceed823
       valid_lft forever preferred_lft forever
    inet6 fe80::42:b0ff:fea1:3d59/64 scope link
       valid_lft forever preferred_lft forever
9: veth89c3be9@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-d3c54ceed823 state UP group default
    link/ether 9e:33:23:fa:3d:41 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::9c33:23ff:fefa:3d41/64 scope link
       valid_lft forever preferred_lft forever
11: vethd6c4eec@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-d3c54ceed823 state UP group default
    link/ether 9a:91:77:bc:c8:00 brd ff:ff:ff:ff:ff:ff link-netnsid 2
    inet6 fe80::9891:77ff:febc:c800/64 scope link
       valid_lft forever preferred_lft forever
[root@docker ~ 14:57:37]# docker run -it --network=my_net --ip 172.18.0.8 busybox
docker: Error response from daemon: invalid config for network my_net: invalid endpoint settings:
user specified IP address is supported only when connecting to networks with user configured subnets.
See 'docker run --help'.

理解容器之间的连通性

bash 复制代码
[root@docker ~ 15:28:43]# docker exec -it busybox2 sh
/ # ping 172.22.16.8
PING 172.22.16.8 (172.22.16.8): 56 data bytes
64 bytes from 172.22.16.8: seq=0 ttl=64 time=0.128 ms
64 bytes from 172.22.16.8: seq=1 ttl=64 time=0.147 ms
64 bytes from 172.22.16.8: seq=2 ttl=64 time=0.149 ms
^C
--- 172.22.16.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.128/0.141/0.149 ms
/ # ping 172.22.16.1
PING 172.22.16.1 (172.22.16.1): 56 data bytes
64 bytes from 172.22.16.1: seq=0 ttl=64 time=0.104 ms
64 bytes from 172.22.16.1: seq=1 ttl=64 time=0.086 ms
^C
--- 172.22.16.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.086/0.095/0.104 ms
/ # ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
^C
--- 172.17.0.2 ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss
/ # read escape sequence
[root@docker ~ 15:34:33]# ip r
default via 192.168.108.2 dev ens160 proto static metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev br-e08ed43672c1 proto kernel scope link src 172.18.0.1 linkdown
172.22.16.0/24 dev br-d3c54ceed823 proto kernel scope link src 172.22.16.1
192.168.108.0/24 dev ens160 proto kernel scope link src 192.168.108.30 metric 100
[root@docker ~ 15:34:36]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
[root@docker ~ 15:34:58]# iptables-save
# Generated by iptables-save v1.8.5 on Tue May 12 15:35:28 2026
*filter
:INPUT ACCEPT [30891:7446944]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [49665:19159933]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o br-d3c54ceed823 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o br-d3c54ceed823 -j DOCKER
-A FORWARD -i br-d3c54ceed823 ! -o br-d3c54ceed823 -j ACCEPT
-A FORWARD -i br-d3c54ceed823 -o br-d3c54ceed823 -j ACCEPT
-A FORWARD -o br-e08ed43672c1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o br-e08ed43672c1 -j DOCKER
-A FORWARD -i br-e08ed43672c1 ! -o br-e08ed43672c1 -j ACCEPT
-A FORWARD -i br-e08ed43672c1 -o br-e08ed43672c1 -j ACCEPT
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i br-d3c54ceed823 ! -o br-d3c54ceed823 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i br-e08ed43672c1 ! -o br-e08ed43672c1 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o br-d3c54ceed823 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-e08ed43672c1 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
COMMIT
# Completed on Tue May 12 15:35:28 2026
# Generated by iptables-save v1.8.5 on Tue May 12 15:35:28 2026
*security
:INPUT ACCEPT [30883:7445112]
:FORWARD ACCEPT [6:504]
:OUTPUT ACCEPT [49665:19159933]
COMMIT
# Completed on Tue May 12 15:35:28 2026
# Generated by iptables-save v1.8.5 on Tue May 12 15:35:28 2026
*raw
:PREROUTING ACCEPT [30899:7447616]
:OUTPUT ACCEPT [49665:19159933]
COMMIT
# Completed on Tue May 12 15:35:28 2026
# Generated by iptables-save v1.8.5 on Tue May 12 15:35:28 2026
*mangle
:PREROUTING ACCEPT [30899:7447616]
:INPUT ACCEPT [30891:7446944]
:FORWARD ACCEPT [8:672]
:OUTPUT ACCEPT [49665:19159933]
:POSTROUTING ACCEPT [49671:19160437]
COMMIT
# Completed on Tue May 12 15:35:28 2026
# Generated by iptables-save v1.8.5 on Tue May 12 15:35:28 2026
*nat
:PREROUTING ACCEPT [16:2376]
:INPUT ACCEPT [5:292]
:POSTROUTING ACCEPT [75:6202]
:OUTPUT ACCEPT [74:6118]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.22.16.0/24 ! -o br-d3c54ceed823 -j MASQUERADE
-A POSTROUTING -s 172.18.0.0/16 ! -o br-e08ed43672c1 -j MASQUERADE
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i br-d3c54ceed823 -j RETURN
-A DOCKER -i br-e08ed43672c1 -j RETURN
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Tue May 12 15:35:28 2026
[root@docker ~ 15:35:28]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED             STATUS             PORTS     NAMES
86d0ae4b5678   busybox   "sh"      38 minutes ago      Up 38 minutes                busybox3
27f3527358e1   busybox   "sh"      41 minutes ago      Up 41 minutes                busybox2
74ff8b9fe84b   busybox   "sh"      About an hour ago   Up About an hour             busybox1
[root@docker ~ 15:36:01]# docker network connect my_net2 busybox1
[root@docker ~ 15:36:24]# docker exec -it busybox1 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
12: eth1@if13: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:16:10:03 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.3/24 brd 172.22.16.255 scope global eth1
       valid_lft forever preferred_lft forever
/ # read escape sequence
[root@docker ~ 15:37:05]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-d3c54ceed823         8000.0242b0a13d59       no              veth009f075
                                                        veth89c3be9
                                                        vethd6c4eec
br-e08ed43672c1         8000.02425288fdee       no
docker0         8000.024213d2158d       no              vethbf629ed
[root@docker ~ 15:44:15]# docker exec -it busybox1 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
12: eth1@if13: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:16:10:03 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.3/24 brd 172.22.16.255 scope global eth1
       valid_lft forever preferred_lft forever
/ #

[root@docker ~ 15:37:16]# docker exec -it busybox2 sh
/ # ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
^C
--- 172.17.0.2 ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss
/ # ping 172.22.16.3
PING 172.22.16.3 (172.22.16.3): 56 data bytes
64 bytes from 172.22.16.3: seq=0 ttl=64 time=0.131 ms
64 bytes from 172.22.16.3: seq=1 ttl=64 time=0.090 ms
64 bytes from 172.22.16.3: seq=2 ttl=64 time=0.092 ms
^C
--- 172.22.16.3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.090/0.104/0.131 ms
/ # read escape sequence

通信的三种方式

IP 通信

从上一节的例子可以得出这样一个结论:两个容器要能通信,必须要有属于同一个网络的网卡

Docker DNS Server

使用 docker DNS 有个限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法 使用 DNS 的

bash 复制代码
[root@docker ~ 15:58:21]# docker run -it --network my_net2 --name box1 busybox
/ # [root@docker ~ 15:59:03]# docker run -it --network my_net2 --name box2 busybox
/ # ping box1
PING box1 (172.22.16.4): 56 data bytes
64 bytes from 172.22.16.4: seq=0 ttl=64 time=0.106 ms
64 bytes from 172.22.16.4: seq=1 ttl=64 time=0.078 ms
64 bytes from 172.22.16.4: seq=2 ttl=64 time=0.073 ms
^C
--- box1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.073/0.085/0.106 ms
/ # [root@docker ~ 15:59:27]# docker run -it --name box3 busybox
/ # [root@docker ~ 15:59:49]# docker run -it --name box4 busybox
/ # ping box3
ping: bad address 'box3'

joined 容器

joined 容器是另一种实现容器间通信的方式。 joined 容器非常特别,它可以使两个或多个容器共享一个网络栈,共享网卡和配置信息,joined 容器之 间可以通过 127.0.0.1 直接通信

bash 复制代码
/ # [root@docker ~ 16:00:01]# docker run -d -it --name web1 httpd
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
57fb71246055: Pull complete
4b31e7d9a3b8: Pull complete
4f4fb700ef54: Pull complete
6e3e6d1d5b56: Pull complete
777279f5ce9f: Pull complete
4b705a141cea: Pull complete
Digest: sha256:bac8021a9b7ad41a399dc72bb0e1f0b832b565632df7e62871e07d2aca8b293e
Status: Downloaded newer image for httpd:latest
02ad010920759b46505a178fc344ad646a877b347bf99e16d220e89a8c3c0f71
[root@docker ~ 16:00:55]# docker exec -it web1 bash
root@02ad01092075:/usr/local/apache2# hostname -i
172.17.0.5
root@02ad01092075:/usr/local/apache2# read escape sequence
##busybox 和 web1 的网卡 mac 地址与 IP 完全一样,它们共享了相同的网络栈。busybox 可以直接用 127.0.0.1 访问 web1 的 http 服务。

[root@docker ~ 16:01:28]# docker run -it --network container:web1 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.5/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # wget 127.0.0.1
Connecting to 127.0.0.1 (127.0.0.1:80)
saving to 'index.html'
index.html           100% |*************************************************|   191  0:00:00 ETA
'index.html' saved
/ # cat index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>It works! Apache httpd</title>
</head>
<body>
<p>It works!</p>
</body>
</html>

容器如何访问外部世界

bash 复制代码
[root@docker ~ 16:25:18]# ping www.qq.com
PING ins-r23tsuuf.ias.tencent-cloud.net (101.91.42.232) 56(84) bytes of data.
64 bytes from 101.91.42.232 (101.91.42.232): icmp_seq=1 ttl=128 time=10.9 ms
64 bytes from 101.91.42.232 (101.91.42.232): icmp_seq=2 ttl=128 time=9.45 ms
^C
--- ins-r23tsuuf.ias.tencent-cloud.net ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 9.451/10.182/10.914/0.738 ms
[root@docker ~ 16:25:35]# docker run -it busybox sh
/ # ping www.11.com
PING www.11.com (104.21.7.201): 56 data bytes
64 bytes from 104.21.7.201: seq=0 ttl=127 time=209.272 ms
^C
--- www.11.com ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 209.272/209.272/209.272 ms
[root@docker ~ 16:27:03]# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P POSTROUTING ACCEPT
-P OUTPUT ACCEPT
-N DOCKER
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.22.16.0/24 ! -o br-d3c54ceed823 -j MASQUERADE
-A POSTROUTING -s 172.18.0.0/16 ! -o br-e08ed43672c1 -j MASQUERADE
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i br-d3c54ceed823 -j RETURN
-A DOCKER -i br-e08ed43672c1 -j RETURN
-A DOCKER -i docker0 -j RETURN

通过 tcpdump 查看地址是如何转换的。先查看 docker host 的路由表:

bash 复制代码
[root@docker ~ 16:31:25]# ip r
default via 192.168.108.2 dev ens160 proto static metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev br-e08ed43672c1 proto kernel scope link src 172.18.0.1 linkdown
172.22.16.0/24 dev br-d3c54ceed823 proto kernel scope link src 172.22.16.1
192.168.108.0/24 dev ens160 proto kernel scope link src 192.168.108.30 metric 100

新开俩个窗口用来抓包docker0网卡和ens160网卡

ping测试

bash 复制代码
[root@docker ~ 16:29:00]# docker run -it busybox sh
/ # ping www.qq.com
PING www.qq.com (101.91.22.57): 56 data bytes
64 bytes from 101.91.22.57: seq=0 ttl=127 time=11.599 ms
64 bytes from 101.91.22.57: seq=1 ttl=127 time=11.394 ms
64 bytes from 101.91.22.57: seq=2 ttl=127 time=12.796 ms
64 bytes from 101.91.22.57: seq=3 ttl=127 time=11.982 ms
^C
--- www.qq.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 11.394/11.942/12.796 ms
/ # 

转到抓包界面观察

观察docker0

bash 复制代码
[root@docker ~ 16:29:25]# tcpdump -i docker0 -n icmp
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on docker0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:30:55.347499 IP 172.17.0.7 > 101.91.22.57: ICMP echo request, id 6, seq 0, length 64
16:30:55.358987 IP 101.91.22.57 > 172.17.0.7: ICMP echo reply, id 6, seq 0, length 64
16:30:56.348049 IP 172.17.0.7 > 101.91.22.57: ICMP echo request, id 6, seq 1, length 64
16:30:56.359311 IP 101.91.22.57 > 172.17.0.7: ICMP echo reply, id 6, seq 1, length 64
16:30:57.348762 IP 172.17.0.7 > 101.91.22.57: ICMP echo request, id 6, seq 2, length 64
16:30:57.361403 IP 101.91.22.57 > 172.17.0.7: ICMP echo reply, id 6, seq 2, length 64
16:30:58.349363 IP 172.17.0.7 > 101.91.22.57: ICMP echo request, id 6, seq 3, length 64
16:30:58.361213 IP 101.91.22.57 > 172.17.0.7: ICMP echo reply, id 6, seq 3, length 64
##docker0 收到 busybox 的 ping 包,源地址为容器 IP 172.17.0.2,这没问题,交给 MASQUERADE 处理

观察ens160

bash 复制代码
[root@docker ~ 16:29:28]# tcpdump -i ens160 -n icmp
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
16:30:55.347527 IP 192.168.108.30 > 101.91.22.57: ICMP echo request, id 6, seq 0, length 64
16:30:55.358951 IP 101.91.22.57 > 192.168.108.30: ICMP echo reply, id 6, seq 0, length 64
16:30:56.348090 IP 192.168.108.30 > 101.91.22.57: ICMP echo request, id 6, seq 1, length 64
16:30:56.359285 IP 101.91.22.57 > 192.168.108.30: ICMP echo reply, id 6, seq 1, length 64
16:30:57.348823 IP 192.168.108.30 > 101.91.22.57: ICMP echo request, id 6, seq 2, length 64
16:30:57.361371 IP 101.91.22.57 > 192.168.108.30: ICMP echo reply, id 6, seq 2, length 64
16:30:58.349404 IP 192.168.108.30 > 101.91.22.57: ICMP echo request, id 6, seq 3, length 64
16:30:58.361181 IP 101.91.22.57 > 192.168.108.30: ICMP echo reply, id 6, seq 3, length 64
##ping 包的源地址变成了 ens160 的 IP 192.168.108.30
  1. busybox 发送 ping 包:172.17.0.2 > www.qq.com

  2. docker0 收到包,发现是发送到外网的,交给 NAT 处理。

  3. NAT 将源地址换成 ens160的 IP:192.168.108.30 > www.qq.com

  4. ping 包从 ens160 发送出去,到达 www.qq.com

    通过 NAT,docker 实现了容器对外网的访问。

外部世界如何访问容器

通过端口映射

bash 复制代码
##-p 指定映射到 host 某个特定端口
[root@docker ~ 16:41:25]# docker run -d -p 80 httpd
1092b1dfe5ae8e06c528300005aa5dfe294491a9d3c18f92a69f5fff4aa615cd
[root@docker ~ 16:42:07]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS                                                             NAMES
1092b1dfe5ae   httpd     "httpd-foreground"   6 seconds ago    Up 5 seconds   
                                       ####这里看到32768映射到80端口
0.0.0.0:32768->80/                        tcp, :::32768->80/tcp   boring_jang
a57c4be438b8   busybox   "sh"                 11 minutes ago   Up 11 minutes                                                                     hardcore_bouman
e01862805906   busybox   "sh"                 16 minutes ago   Up 16 minutes                                                                     dazzling_bassi
dba34b86ae91   busybox   "sh"                 40 minutes ago   Up 40 minutes                                                                     goofy_edison
02ad01092075   httpd     "httpd-foreground"   41 minutes ago   Up 41 minutes   80/tcp                                                            web1
4ea90c744ae2   busybox   "sh"                 42 minutes ago   Up 42 minutes                                                                     box4
40ee7711bf24   busybox   "sh"                 42 minutes ago   Up 42 minutes                                                                     box3
2096cbe0efd2   busybox   "sh"                 43 minutes ago   Up 43 minutes                                                                     box2
c69d8247d077   busybox   "sh"                 43 minutes ago   Up 43 minutes                                                                     box1
86d0ae4b5678   busybox   "sh"                 2 hours ago      Up 2 hours                                                                        busybox3
27f3527358e1   busybox   "sh"                 2 hours ago      Up 2 hours                                                                        busybox2
74ff8b9fe84b   busybox   "sh"                 3 hours ago      Up 3 hours                                                                        busybox1
[root@docker ~ 16:42:13]# curl 192.168.108.30:32768
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>It works! Apache httpd</title>
</head>
<body>
<p>It works!</p>
</body>
</html>
##-p 中指定映射到 host 某个特定端口,将 80 端口映射到 host的8080端口
[root@docker ~ 16:42:55]# docker run -d -p 8080:80 httpd
9d4e117306f559db3126162ba9b82242392c85d325372dcbd1ce8b56194159c7
[root@docker ~ 16:43:14]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED              STATUS              PORTS                                     NAMES
9d4e117306f5   httpd     "httpd-foreground"   8 seconds ago        Up 7 seconds        0.0.0.0:8080->80/tcp, :::8080->80/tcp     ecstatic_meitner
1092b1dfe5ae   httpd     "httpd-foreground"   About a minute ago   Up About a minute   0.0.0.0:32768->80/tcp, :::32768->80/tcp   boring_jang
a57c4be438b8   busybox   "sh"                 12 minutes ago       Up 12 minutes                                                 hardcore_bouman
e01862805906   busybox   "sh"                 17 minutes ago       Up 17 minutes                                                 dazzling_bassi
dba34b86ae91   busybox   "sh"                 41 minutes ago       Up 41 minutes                                                 goofy_edison
02ad01092075   httpd     "httpd-foreground"   42 minutes ago       Up 42 minutes       80/tcp                                    web1
4ea90c744ae2   busybox   "sh"                 43 minutes ago       Up 43 minutes                                                 box4
40ee7711bf24   busybox   "sh"                 43 minutes ago       Up 43 minutes                                                 box3
2096cbe0efd2   busybox   "sh"                 44 minutes ago       Up 44 minutes                                                 box2
c69d8247d077   busybox   "sh"                 44 minutes ago       Up 44 minutes                                                 box1
86d0ae4b5678   busybox   "sh"                 2 hours ago          Up 2 hours                                                    busybox3
27f3527358e1   busybox   "sh"                 2 hours ago          Up 2 hours                                                    busybox2
74ff8b9fe84b   busybox   "sh"                 3 hours ago          Up 3 hours                                                    busybox1
[root@docker ~ 16:43:22]# curl 192.168.108.30:8080
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>It works! Apache httpd</title>
</head>
<body>
<p>It works!</p>
</body>
</html>

"sh" 44 minutes ago Up 44 minutes box2

c69d8247d077 busybox "sh" 44 minutes ago Up 44 minutes box1

86d0ae4b5678 busybox "sh" 2 hours ago Up 2 hours busybox3

27f3527358e1 busybox "sh" 2 hours ago Up 2 hours busybox2

74ff8b9fe84b busybox "sh" 3 hours ago Up 3 hours busybox1

root@docker \~ 16:43:22\]# curl 192.168.108.30:8080 It works! Apache httpd It works! \`\`\`

相关推荐
dhashdoia1 小时前
Claude Code /goal功能深度解析:从自动化编程到目标驱动开发
运维·人工智能·自动化·claude
奋斗的小乌龟1 小时前
langchain4j笔记-04
笔记
黑贝是条狗1 小时前
Excel批量处理工具
linux·运维·excel
实心儿儿1 小时前
Linux —— 进程间通信 - 匿名管道
linux·运维·服务器
LuDvei1 小时前
Ubuntu 20.04 安装 Android Studio 详细指南
linux·ubuntu·android studio
他是龙5511 小时前
SQLi-Labs 通关笔记(Less-38 ~ Less-53):堆叠注入与 ORDER BY 注入
数据库·笔记·less
枕星而眠1 小时前
Linux 共享内存与信号量全解析:原理、实践与避坑指南
linux·c语言·开发语言·后端·ubuntu
渣渣灰95871 小时前
U-Boot启动流程
经验分享·笔记
wgl6665201 小时前
进程间通信
linux·运维·服务器