我使用以下命令从一个镜像启动Docker容器:
$ docker run -d myimage /bin/bash -c "mycommand"
当"mycommand"
完成时,容器会停止(我假设它已经停止),但它不会被删除,因为我可以使用这个命令看到它:
当"mycommand"
完成时,容器会停止(我猜测已经停止),但不会被删除,因为我可以用此命令看到它:
$ docker ps -a
有没有办法使用相同的参数重新启动这个容器,并保留由mycommand
生成的数据?
我使用以下命令从一个镜像启动Docker容器:
$ docker run -d myimage /bin/bash -c "mycommand"
当"mycommand"
完成时,容器会停止(我假设它已经停止),但它不会被删除,因为我可以使用这个命令看到它:
当"mycommand"
完成时,容器会停止(我猜测已经停止),但不会被删除,因为我可以用此命令看到它:
$ docker ps -a
有没有办法使用相同的参数重新启动这个容器,并保留由mycommand
生成的数据?
是的,当初始命令执行完成后容器将停止。
您可以使用以下命令启动已停止的容器:
docker start container_name
如果要查看命令的输出,则应添加-ai
选项:
docker start -ai container_name
注意,有一个docker restart container_name
命令,但该命令用于重新启动正在运行的容器——我认为这不是您的情况。
docker exec -it container_name bash
在其中运行命令。当我从容器内部运行该命令时,我可以看到为什么我的脚本的初始实现失败了,并进行了修复。 - PatS首先,$ docker ps -a
显示所有容器(正在运行的和停止的),这就是你没有看到已停止的容器列出的原因。
其次,你可以轻松地启动一个停止的容器:
$ docker start container_name
容器启动后,您可以通过以下方式运行命令:
$ docker exec -it container_name bash -c "mycommand"
只要容器存在,您在容器中创建的内容将保留在容器内。如果您想即使删除容器也保留数据,则可以使用卷。
它应该是
$ docker restart container_id # OR
$ docker restart container_name
restart
是用于已经运行的容器。 - 3pitt顺便说一下:在重新启动容器时,我们无法替换默认命令,因为一旦使用默认命令启动容器,该命令就会设置为容器的默认命令。例如,如果我们启动容器并覆盖默认命令,让我们看看会发生什么:
Docker认为我们正在尝试同时启动和附加多个容器。 因此,当我们启动一个容器并让它退出时,我们可以重新启动它,这将重新发出容器第一次创建时使用的默认命令。这是Docker容器生命周期的一部分。很遗憾,如果您重新启动虚拟机/系统并且它显示
mysql-tls:5.7 "docker-entrypoint.s…" 18 hours ago Exited (255) 44 seconds ago
答案:
启动容器
docker start mysql
或者
docker start 你的容器名称
docker container ls
从输出中复制容器 ID:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aeb64b607336 dbeaver/cloudbeaver:latest "./run-server.sh" About an hour ago Up 2 minutes 0.0.0.0:8080->8978/tcp cloudbeaver
docker container pause container_id
docker container unpause container_id