除了使用交互式 shell 运行 docker 容器之外,还可以让 docker 容器作为守护进程运行,这意味着 docker 容器将在后台运行,与我们当前的 shell 完全分离。
以下 CentOS docker 容器将使用 -d
选项作为守护容器启动,同时使用无限的 bash while 循环执行 ping 8.8.8.8
。
# docker run --name centos-linux -d centos /bin/sh -c "while true; do ping 8.8.8.8; done"
使用 docker 的 ps
命令,我们可以看到我们的 centos-linux
容器正在运行:
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6acfc613c604 centos:7 "/bin/sh -c 'while t 23 seconds ago Up 23 seconds centos-linux
通过检查容器日志可以访问上述无限循环的实际输出:
# docker logs 6acfc613c604 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=18.5 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=18.8 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=56 time=18.1 ms
使用 docker exec
重新添加到容器交互式 shell:
# docker exec -it centos-linux /bin/bash [root@6acfc613c604 /]#
此外,使用 docker exec
我们还可以在 docker 容器中运行任何所需的命令。
以下命令将使用 docker exec
获取分配给 centos-linux
容器的 IP 地址,而无需交互式 shell:
# docker exec -it centos-linux ip add show 1: lo: mtu 65536 qdisc noqueue state UNKNOWN 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 67: eth0: mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:21 brd ff:ff:ff:ff:ff:ff inet 172.17.0.33/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:21/64 scope link valid_lft forever preferred_lft forever
停止守护容器与停止任何其他 docker 容器相同:
# docker stop 6acfc613c604 6acfc613c604
日期:2020-07-07 20:57:10 来源:oir作者:oir