【问题标题】:Error response from daemon: Container CONTAINER_NAME is not running来自守护程序的错误响应:容器 CONTAINER_NAME 未运行
【发布时间】:2023-04-08 12:31:01
【问题描述】:

我有一个 docker 映像 dajobe/hbase,它是从 Ubuntu 构建的。我为这个图像创建了一个容器并将其命名为 hb。

$ docker run -d --name hb dajobe/hbase
e1f68ff8b3b6c5e474426e2566f8c087d6a785fc5eeb58cd2aeb86176068651d

然后我在 hb 上启动 /bin/bash,并检查 vi 编辑器的可用性。

$ docker exec -it hb /bin/bash
root@e1f68ff8b3b6:/# vi
bash: vi: command not found

然后我使用 apt-get 安装了 vi 编辑器

# apt-get install vim
Reading package lists...
DoneBuilding dependency tree
Reading state information... Done
.....
.....

我想提交更改,以便 vi 编辑器可以持续存在。

$ docker commit hb dajobe/hbase
1be196188efc5a52562dc8ee1b63d0fd560ea163c49331c10dc435848d75ef64

然后,当我再次启动 dajobe/hbase 时,它​​自动停止了。

$ docker run -d --name hb dajobe/hbase
c3e7b9f48077ef854efc6f9bab5e85986e265c98de5423bece0000c973206c38

$ docker exec -it hb /bin/bash
FATA[0000] Error response from daemon: Container hb is not running

为什么容器没有运行?

$ docker ps -a
CONTAINER ID        IMAGE              COMMAND          CREATED                   STATUS                 PORTS      NAMES
c3e7b9f48077 dajobe/hbase:latest "/opt/hbase-server"  11 secs ago         Exited (0) 8 secs ago                      hb

为什么状态是“退出”?在提交之前,情况并非如此,状态为“Up”。

【问题讨论】:

  • 用命令docker events查看原因,查看文档docs.docker.com/reference/commandline/cli/#events,例如docker events --filter container=c3e7b9f48077
  • 这个命令没有任何反应..我运行命令,然后没有任何反应,我需要做一个 Ctrl+C 停止。
  • 只要docker events 就能启发我们
  • 我已经弄清楚这里发生了什么。实际上命令/opt/hbase-server 正在失败,但我不知道为什么?它与原始图像完美配合。

标签: docker boot2docker


【解决方案1】:

我希望状态为已退出。也许您使用的原始图像有一个 ENTRYPOINT,它做了一些事情来让容器在您执行时保持运行。你可以试试这个:

docker run -d --name hb dajobe/hbase sleep 60

然后尝试您的 exec,在接下来的 60 秒内,您将与交互式 shell 连接。之后,您将再次收到相同的消息。

-d 使容器成为守护进程。但是,它需要做一些事情,否则它就会退出!您是否尝试过仅使用 -it 执行运行行?

docker run -it --name hb dajobe/hbase bash

您也会在此处获得一个 shell 提示,您可以在其中对图像进行更新。

-g

【讨论】:

  • 是的,你是对的,sleep 60 允许容器活动 60 秒。实际上,sleep 60 覆盖了原始命令 /opt/hbase-server。但是为什么当我尝试使用新图像时 hbase-server 会退出?它与原始版本完美配合。原始图像和新图像(已提交)不会相同吗?除了提交的图像上安装了 vim 的事实。
  • 我不知道新提交的图像如何获得其入口点。文档:docs.docker.com/reference/commandline/cli/#commit 建议您应该使用 Dockerfile 来维护您的图像,而不是交互式地进行。然后,您将拥有明确的控制权。我不知道当正在运行的图像被暂停并保存到新图像时会发生什么。
【解决方案2】:

在我的例子中,它再次解决了启动容器的问题,听起来很简单。

  • 不知道的用docker ps -a(列“NAMES”)搜索容器名称;在您的情况下,它是已知的:“hb”。
  • 然后docker start hb。
  • 然后docker exec -it hb /bin/bash。

当您想启动一个已经存在但已退出的容器时,您使用了run 而不是start。我在你的命令中没有看到任何start。

然后,当我再次启动 dajobe/hbase时,它自动停止了。

$ docker 运行 -d --name hb dajobe/hbase c3e7b9f48077ef854efc6f9bab5e85986e265c98de5423bece0000c973206c38

$ docker exec -it hb /bin/bash FATA[0000] 来自守护进程的错误响应: 容器 hb 没有运行

【讨论】:

    【解决方案3】:

    我也面临和你一样的运行couchdb bash命令

    docker exec -it my-couchdb bash
    and
    docker exec -it my-couchdb /opt/couchdb/bin/remsh
    

    错误信息:

    Error response from daemon: Container 54ca56353e3839ff0b824cf5468973aff021d14ad6b2531b85a1b95437b2ae13 is not running
    

    对我来说,解决方案是... 每当我创建容器时,我都会进行各种设置

    命令:

    docker run -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password --publish=5984:5984 --name my-couchdb --volume=$HOME/Desktop/BigData/docker-couchdb/data:/opt/couchdb/etc/local.d -d couchdb
    

    如果有人遇到与我相同的问题,请先尝试其他解决方案,如果所有其他解决方案都不起作用,请尝试我的解决方案,希望它最终会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-12
      • 2016-12-15
      • 2021-11-06
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 2016-12-20
      • 2017-05-16
      相关资源
      最近更新 更多