重启 Docker 后所有容器的端口不见了,这可能是因为 Docker daemon 重新启动时没有重新加载之前的容器配置。解决这个问题的方法有两种:一是手动重新启动容器,二是使用 Docker Compose 管理容器。

以下是两种方法的详细说明。

方法一:手动重新启动容器

  1. 首先,使用 docker ps -a 命令查看所有当前停止的容器,确定要重新启动的容器名称或 ID。

  2. 使用 docker start [容器名称或 ID] 命令重新启动容器。例如:

docker start my-container
  1. 使用 docker ps 命令确认容器已经成功启动,并且端口已经重新映射。

这种方法适用于只有少量容器需要重新启动的情况,但如果容器较多,手动操作会比较繁琐。

方法二:使用 Docker Compose 管理容器

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过编写一个 Docker Compose 文件,可以定义容器之间的依赖关系、网络配置、卷挂载等,并通过一个命令启动和管理所有容器。

以下是使用 Docker Compose 的步骤:

  1. 首先,创建一个名为 docker-compose.yml 的文件,并在文件中定义容器的配置。例如:
version: '3'
services:
  my-container:
    image: my-image
    ports:
      - "8080:80"

上述示例中,my-container 是容器的名称,my-image 是容器的镜像,8080 是宿主机的端口,80 是容器的端口。

  1. 在命令行中进入 Docker Compose 文件所在目录,运行以下命令启动容器:
docker-compose up -d

-d 参数表示以后台模式运行容器。

  1. 使用 docker ps 命令确认容器已经成功启动,并且端口已经重新映射。

使用 Docker Compose 可以方便地管理多个容器,可以通过修改 Docker Compose 文件来修改容器的配置,并且可以通过一个命令启动和停止所有容器。

序列图

下面是一个使用 Docker Compose 管理容器的序列图:

sequenceDiagram
    participant User
    participant DockerClient
    participant DockerDaemon
    participant Container

    User->>DockerClient: docker-compose up -d
    DockerClient->>DockerDaemon: 发送启动容器请求
    DockerDaemon->>Container: 创建容器
    Container->>DockerDaemon: 容器已创建
    DockerDaemon->>DockerClient: 返回启动成功消息
    DockerClient->>User: 返回启动成功消息

在序列图中,用户使用 docker-compose up -d 命令启动容器,Docker 客户端将启动容器的请求发送给 Docker daemon,Docker daemon 创建容器并返回启动成功的消息。

总结:

当重启 Docker 后所有容器的端口不见了时,可以手动重新启动容器或使用 Docker Compose 管理容器。手动重新启动容器适用于只有少量容器需要重新启动的情况,而使用 Docker Compose 可以方便地管理多个容器。在使用 Docker Compose 管理容器时,可以通过一个命令启动和停止所有容器。