【问题标题】:How can I run bash in a new container of a docker image?如何在 docker 映像的新容器中运行 bash?
【发布时间】:2017-09-04 14:53:55
【问题描述】:

我能够在从 docker/whalesay 映像创建的容器中运行任意 shell 命令。

$ docker run docker/whalesay ls -l
total 56
-rw-r--r-- 1 root root  931 May 25  2015 ChangeLog
-rw-r--r-- 1 root root  385 May 25  2015 INSTALL
-rw-r--r-- 1 root root 1116 May 25  2015 LICENSE
-rw-r--r-- 1 root root  445 May 25  2015 MANIFEST
-rw-r--r-- 1 root root 1610 May 25  2015 README
-rw-r--r-- 1 root root  879 May 25  2015 Wrap.pm.diff
drwxr-xr-x 2 root root 4096 May 25  2015 cows
-rwxr-xr-x 1 root root 4129 May 25  2015 cowsay
-rw-r--r-- 1 root root 4690 May 25  2015 cowsay.1
-rw-r--r-- 1 root root   54 May 25  2015 install.pl
-rwxr-xr-x 1 root root 2046 May 25  2015 install.sh
-rw-r--r-- 1 root root  631 May 25  2015 pgp_public_key.txt
$ docker run docker/whalesay lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.2 LTS
Release:    14.04
Codename:   trusty

但是,我无法在从此映像创建的容器中运行 shell。

$ docker run docker/whalesay bash
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
7ce600cc9904        docker/whalesay     "bash"                   5 seconds ago       Exited (0) 3 seconds ago                           loving_mayer

为什么它不起作用?我怎样才能让它发挥作用?

【问题讨论】:

  • 执行 docker exec -it 7ce600cc9904 /bin/bash 会发生什么?
  • @SilentMonk 失败并出现此错误:Error response from daemon: Container 7ce600cc990463518cc8fa073014942d99347b4ff0d6927031c8a839e8a8803e is not running

标签: bash docker


【解决方案1】:

如果你 docker run 没有附加 tty,只调用 bash,那么 bash 无事可做,然后退出。这是因为默认情况下,容器是非交互的,而在非交互模式下运行的 shell 需要运行脚本。如果没有,它将退出。

要运行一次性的新容器,您可以简单地附加一个 tty 和标准输入:

docker run --rm -it --entrypoint bash <image-name-or-id>

或者为了防止上面的容器被销毁,不带--rm运行。

或者要进入正在运行的容器,请改用exec

docker exec -it <container-name-or-id> bash

在你问的 cmets 中

你知道这和docker run -it --entrypoint bash docker/whalesay有什么区别吗?

在上面的两个命令中,您将bash 指定为CMD。在此命令中,您将 bash 指定为 ENTRYPOINT

每个容器都使用ENTRYPOINTCMD 的组合运行。如果您(或图像)未指定ENTRYPOINT,则默认入口点为/bin/sh -c

所以在前面两个命令中,如果你运行bash作为CMD,并且使用默认的ENTRYPOINT,那么容器将使用运行

/bin/sh -c bash

如果您指定--entrypoint bash,则改为运行

bash <command>

其中&lt;command&gt; 是图像中指定的CMD(如果指定了)。

【讨论】:

  • 谢谢。 docker run -it docker/whalesay bash 有效。你知道这和docker run -it --entrypoint bash docker/whalesay有什么区别吗?
猜你喜欢
  • 2018-07-06
  • 2016-02-12
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多