「Docker」- 常用容器操作、修改容器配置

  CREATED BY JENKINSBOT

修改容器参数,实现开机自启动

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 没有输出,表示没有容器占用主机的该端口