Docker容器未启动(docker启动)

Kar*_*son 40 docker

我使用以下命令创建了容器:

docker run -d -p 52022:22 basickarl/docker-git-test
Run Code Online (Sandbox Code Playgroud)

以下是命令:

root@basickarl:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@basickarl:~# docker ps -a
CONTAINER ID        IMAGE                              COMMAND             CREATED             STATUS                           PORTS               NAMES
e4ac54468455        basickarl/docker-git-test:latest   "/bin/bash"         7 minutes ago       Exited (0) 26 seconds ago                            adoring_lumiere     
22d7c5d83871        basickarl/docker-git-test:latest   "/bin/bash"         2 hours ago         Exited (127) About an hour ago                       thirsty_wright      
root@basickarl:~# docker attach --sig-proxy=false e4
FATA[0000] You cannot attach to a stopped container, start it first 
root@basickarl:~# docker start e4
e4
root@basickarl:~# docker attach --sig-proxy=false e4
FATA[0000] You cannot attach to a stopped container, start it first 
root@basickarl:~# 
Run Code Online (Sandbox Code Playgroud)

没什么好说的,我期待容器启动并保持优势.这是日志:

root@basickarl:~# docker logs e4
root@basickarl:~# 
Run Code Online (Sandbox Code Playgroud)

lar*_*sks 59

您正在尝试运行bash,这是一个需要tty 才能运行的交互式shell.在"分离"模式下运行它并没有什么意义-d,但是您可以通过添加-it到命令行来执行此操作,这可以确保容器具有与之关联的有效tty并stdin保持连接:

docker run -it -d -p 52022:22 basickarl/docker-git-test
Run Code Online (Sandbox Code Playgroud)

在启动分离的容器时sshd,您通常会运行某种长期非交互式进程(如,或Web服务器,或数据库服务器,或类似systemd或的进程管理器supervisor).

如果您尝试运行类似的服务sshd,则不能简单地运行service ssh start.这将取决于您在容器内运行的分布 - 执行以下两项操作之一:

  • 它将尝试联系流程管理器,systemd或者upstart启动服务.因为没有服务管理器在运行,所以这将失败.

  • 它实际上会启动sshd,但它将在后台启动.这意味着(a)service sshd start命令退出,这意味着(b)Docker认为您的容器已经失败,因此它会清除所有内容.

如果你想运行只是在一个容器SSH,考虑类似的例子这样.

如果要在容器内运行sshd 和其他进程,则需要调查某种进程管理器.

  • 是的,但可以肯定的是,这将创建一个新容器,而不是启动现有容器. (2认同)
  • 这就是现有的无法启动的原因。Bash 立即失败,因为它没有附加 tty。这也是没有日志的原因(因为进程立即退出而不生成任何输出)。 (2认同)