我完全是码头工人的新手。我试图启动一个退出的容器,如下,
docker ps -a
列出了所有可用的容器。它列出了以下内容,
我输入以下命令来启动处于退出阶段的容器并进入该图像的终端。
docker start 79b3fa70b51d
docker exec -it 79b3fa70b51d \bin\sh
抛出以下错误。
FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running
但是当我使用docker start 79b3fa70b51d
启动容器时。它将容器ID作为输出抛出,如果一切正常,则是正常的。我不确定导致此错误的原因。任何关于这个的原因和建议的想法对我来说都会有很大帮助。提前谢谢。
答案 0 :(得分:31)
默认情况下,如果您没有在容器上运行任何任务,则docker容器将立即退出。
要使容器在后台运行,请尝试使用--detach
(或-d
)参数运行它。
例如:
docker pull debian
docker run -t -d --name my_debian debian
e7672d54b0c2
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7672d54b0c2 debian "bash" 3 minutes ago Up 3 minutes my_debian
#now you can execute command on the container
docker exec -it my_debian bash
root@e7672d54b0c2:/#
答案 1 :(得分:18)
容器79b3fa70b51d
似乎只执行echo
。
这意味着它会启动,回显然后立即退出。
下一个docker exec
command将无法运行,以便将自身附加到该容器并执行任何命令:为时已晚。容器已经退出。
docker exec
命令在正在运行的容器中运行新命令。使用
docker exec
启动的命令仅在容器的主进程(PID 1)运行时运行
答案 2 :(得分:9)
如果无法再次启动主进程(足够长时间),则还有可能commit
容器到新映像并从此映像运行新容器。虽然这不是通常的最佳实践工作流程,但我发现偶尔调试失败的脚本非常有用。
docker exec -it 6198ef53d943 bash
Error response from daemon: Container 6198ef53d9431a3f38e8b38d7869940f7fb803afac4a2d599812b8e42419c574 is not running
docker commit 6198ef53d943
sha256:ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33
docker run -it ace7ca65e6e bash
root@72d38a8c787d:/#
答案 3 :(得分:5)
这对我有用。
获取容器ID并重新启动。
docker ps -a --no-trunc
ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33
docker restart ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33
答案 4 :(得分:4)
docker run -it --entrypoint /bin/bash <imageid>
这是L0j1k在下面的帖子中发布的,并为我工作。
答案 5 :(得分:3)
首先,我们必须启动docker容器
ankit@ankit-HP-Notebook:~$ sudo docker start 3a19b39ea021
3a19b39ea021
之后,检查docker容器:
ankit@ankit-HP-Notebook:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a19b39ea021 coreapps/ubuntu16.04:latest "bash" 13 hours ago
Up 9 seconds ubuntu1
455b66057060 hello-world "/hello" 4 weeks ago
Exited (0) 4 weeks ago vigorous_bardeen
然后使用以下命令执行:
ankit@ankit-HP-Notebook:~$ sudo docker exec -it 3a19b39ea021 bash
root@3a19b39ea021:/#
答案 6 :(得分:3)
docker run -it <image_id> /bin/bash
以交互方式运行,然后执行bash shell
答案 7 :(得分:2)
对于任何尝试使用Dockerfile进行类似操作的人...
以分离模式运行将无济于事。如果该命令是非阻塞的,那么容器将始终退出(停止运行),对于bash就是这种情况。
在这种情况下,一种解决方法是: 1.提交结果图像: (container_name =您要基于其图像的容器的名称, image_name =要创建的图像的名称 码头工人提交容器名称图像名称 2.使用docker run使用新映像创建一个新容器,并指定要运行的命令。在这里,我将运行“ bash”: docker run -it image_name bash
这将为您提供所需的交互式登录名。
答案 8 :(得分:1)
原因就是所接受的答案所说的。我添加了一些额外的信息,这些信息可以使您对该问题有进一步的了解。
Created
,Running
,Stopped
,
Exited
,Dead
和我所知道的其他人。docker create
时,docker守护进程将创建一个
状态为Created
的容器。docker start
时,docker守护程序将启动现有容器
其状态可以为Created
或Stopped
。docker run
时,docker守护进程将在两次完成
步骤:docker create
和docker start
。docker stop
时,显然docker守护程序将停止容器。
这样容器将处于Stopped
状态。Exited
。进程何时退出?换句话说,这是什么过程,我们是如何开始的?
答案是在dockerfile中使用CMD
或在以下表达式中使用command
,在某些图像中默认为bash
,即ubutu:18.04。
docker run ubuntu:18.04 [command]
答案 9 :(得分:1)
这种情况会在立即退出的图像上发生,例如,因为没有命令触发服务等待请求。
因此,您可以仅以交互方式运行图像。下面的示例带有节点图片:
docker run -it node /bin/bash
输出为
root@cacc7897a20c:/# echo $SHELL
/bin/bash
答案 10 :(得分:1)
这是当Docker容器正常退出并且您可以编辑Dockerfile时的解决方案。
通常,当运行docker容器时,通过运行命令为应用程序提供服务。从Dockerfile reference,
CMD和ENTRYPOINT指令都定义了在什么情况下执行什么命令 运行一个容器。 ... Dockerfile应该至少指定CMD或ENTRYPOINT命令之一。
在构建映像时,如果不使用CMD或ENTRYPOINT指定任何命令,则将执行基本映像的CMD或ENTRYPOINT命令。
例如,官方的Ubuntu Dockerfile具有CMD ["/bin/bash"]
(https://hub.docker.com/_/ubuntu)。现在,bin/bash/
命令可以接受输入,docker run -it IMAGE_ID
命令将STDIN附加到容器。结果是您获得了一个交互式终端,并且容器一直在运行。
在Dockerfile中指定带有CMD或ENTRYPOINT的命令时,运行容器时将执行此命令。现在,如果此命令可以完成而无需任何输入,它将完成并且容器将退出。在这种情况下,docker run -it IMAGE_ID
将不提供交互式终端。一个示例是从下面的Dockerfile构建的Docker映像-
FROM ubuntu
ENTRYPOINT echo hello
如果需要转到该映像的终端,则需要通过修改entrypoint命令来保持容器运行。
FROM ubuntu
ENTRYPOINT echo hello && sleep infinity
使用docker run IMAGE_ID
正常运行容器后,您可以转到另一个终端并使用docker exec -it CONTAINER_ID bash
来获取容器的终端。
答案 11 :(得分:0)
就我而言,我更改了Dockerfile父目录的某些文件名和目录名。由于哪个容器找不到所需的参数才能再次启动它。
将其重命名为原始名称后,容器开始像黄油一样。
答案 12 :(得分:0)
对此我有不同的看法。我可以做一个docker ps
并看到有一个docker容器正在运行,我什至试图重新启动它,但是一旦我尝试与New-PSSession -ContainerId $containerId -RunAsAdministrator
进行会话,它就会出错,说:
## [错误] New-PSSession:输入的ContainerId xxx不存在, ## [错误]或相应的容器未运行。
我的问题是我正在使用网络服务运行,并且它没有足够的权限来查看容器,即使我已授予它运行docker命令的权限(使用docker安全组配置)
我不知道如何启用容器,因此我不得不恢复为以管理员用户身份运行
答案 13 :(得分:0)
使用命令
> docker container ls
> docker image ls
检查您的图像 ID 并记下。这里我的 Image id 是 "6c929ca002da" ,你们必须使用自己的 Image id 而不是我的。
> docker start 6c929ca002da
这里我们的图像处于向下模式,我们必须首先使用图像 ID 启动它。 6c929ca002da 是我的图像 ID
> `docker exec -it 6c929ca002da bash`
运行此命令后,您可以看到 像这样运行模式下的图像文件
<块引用>root@6c929ca002da
这里我使用root模式通过命令进入root模式
<块引用>sudo su