修改容器参数,实现开机自启动
docker update | Docker Documentation
Start containers automatically | Docker Documentation
在启动容器时,通过 --restart=always 选项,来实现容器自启动。
当我们创建容器之后,我们发现没有使用 –restart always 来使容器开机自动启动。但是我们不想重新创建容器(这牵扯很多问题)。
当容器已经创建,除了重新创建容器,我们能够使用 docker update 命令:
# 修改单个容器 docker update --restart always redis # 修改全部容器 docker update --restart unless-stopped $(docker ps -q)
以 ROOT 用户进入容器
How to login using root user into docker container ? · Issue #1336 · oracle/docker-images
在构建镜像时,使用 USER 命令来控制运行(创建容器)时的默认用户。当我们进入容器时,默认将以 USER 定义的用户身份进入容器。
但是我们需要以 ROOT 用户进入容器,以进行维护。这需要使用 –user 选项:
docker container exec -it --user root jenkins-2.274 /bin/bash
容器无法停止
Cannot stop or restart a docker container – Stack Overflow
执行 docker container stop … 与 docker container kill –signal KILL … 都无法解决进程。
使用系统的 kill 命令来结束:
kill -KILl "<pid>"
找到占用特定端口的容器(或进程)
shell – How to check if a process is running inside docker container? – Stack Overflow
Networking using the host network | Docker Documentation
docker ps | Docker Documentation
docker port | Docker Documentation
List Docker Container Names and IPs
我们需要找到占用特定端口的容器或者进程(我们也不确定是容器占用还是进程占用)
# netstat -tulpn | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13627/nginx: master tcp6 0 0 :::80 :::* LISTEN 13627/nginx: master # pstree -sg 13627 systemd(1)───containerd-shim(13605)───nginx(13627)───nginx(13627) // 很显然,这是容器占用主机端口 // 我们也能推测出容器使用 host network 运行 -------------------------------------------------------------------------------- # netstat -tulpn | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4500/docker-proxy // 如上输出表示:主机的特定端口,被容器通过端口映射的方式占用。 // 使用 docker ps 命令进行查看相关容器 // 最后,使用 docker port 命令来确认端口占用: # docker container ls --filter expose=80 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30cc491f3d25 nginx "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp my_nginx # docker port my_nginx 80/tcp -> 0.0.0.0:80 -------------------------------------------------------------------------------- // 如果 netstat | grep 没有输出,表示没有容器占用主机的该端口