【问题标题】:Docker container not starting (docker start)Docker 容器未启动(docker start)
【发布时间】:2015-07-09 13:27:18
【问题描述】:

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

docker run -d -p 52022:22 basickarl/docker-git-test

命令如下:

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:~# 

真的没什么好说的,我期待容器启动并保持正常运行。以下是日志:

root@basickarl:~# docker logs e4
root@basickarl:~# 

【问题讨论】:

  • docker logs e4 怎么说?
  • @kojiro 更新问题,似乎不想给我任何问题。
  • 哦,当然。您不能真正附加到退出的外壳。在这种情况下,即使 docker start -ia $(docker ps -ql) 也会失败。最好的办法是提交该容器并启动一个新映像。

标签: docker


【解决方案1】:

您正在尝试运行bash,这是一个需要 tty 才能运行的交互式 shell。使用-d 在“分离”模式下运行它并没有真正意义,但您可以通过将-it 添加到命令行来执行此操作,这样可以确保容器具有与之关联的有效tty 并且@ 987654325@ 保持连接状态:

docker run -it -d -p 52022:22 basickarl/docker-git-test

在开始分离时,您通常会运行某种长期存在的非交互式进程(如 sshd、Web 服务器、数据库服务器或进程管理器,如 systemdsupervisor)容器。

如果您尝试运行sshd 之类的服务,则不能简单地运行service ssh start。这将 - 根据您在容器中运行的发行版 - 执行以下两项操作之一:

  • 它将尝试联系systemdupstart 等流程管理器来启动服务。因为没有服务管理器在运行,所以会失败。

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

如果您想在容器中运行只是 ssh,请考虑像this 这样的示例。

如果你想在容器内运行sshd和其他进程,你需要调查某种进程主管。

【讨论】:

  • 是的,但可以肯定的是,这将创建一个新容器,而不是启动现有容器。
  • 这就是现有的无法启动的原因。 Bash 立即失败,因为它没有附加 tty。这也是没有日志的原因(因为进程立即退出而不产生任何输出)。
  • 啊,你刚刚说清楚了,如果我不运行某种进程,它当然会退出。
  • 你提到 ssh 很有趣,因为这就是我要开始工作的,我运行 docker run -d -p 52022:22 basickarl/docker-git-test service ssh start,但不会熬夜。日志显示 OpenSSH 已启动。
  • 好消息!现在通过docker run -d -p 52022:22 basickarl/docker-git-test /usr/sbin/sshd -D 让它工作。
【解决方案2】:

我需要在我的 Ubuntu 机器上的不同端口 /3301/ 上使用 Docker 和 MariaDb,因为我已经在 3306 上安装并运行了 MySql。

要在半天搜索后执行此操作:

docker run -it -d -p 3301:3306 -v ~/mdbdata/mariaDb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mariaDb mariadb

这会使用最新的 MariaDb 拉取镜像,创建名为 mariaDb 的容器,并在端口 3301 上运行 mysql。所有数据都位于 /mdbdata/mariaDb 的主目录中。

之后登录mysql可以使用:

mysql -u root -proot -h 127.0.0.1 -P3301

使用的来源是:

Iarks 在这篇文章中的答案 /using -it -d 是关键:) /

how-to-install-and-use-docker-on-ubuntu-16-04

installing-and-using-mariadb-via-docker

mariadb-and-docker-use-cases-part-1

祝大家好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2018-10-08
    • 2022-01-14
    • 2015-03-07
    • 1970-01-01
    • 2017-01-07
    相关资源
    最近更新 更多