【问题标题】:Ubuntu docker running docker运行 docker 的 Ubuntu docker
【发布时间】:2018-01-10 13:58:36
【问题描述】:

我有以下docker-compose 文件:

version: '2'
services:
  ubuntu:
    image: 'ubuntu:16.04'
    ports:
      - '22:22'

当启动这个时,容器似乎崩溃了,以下是我看到的日志:

Attaching to playground_ubuntu_1
ubuntu_1  | Error grabbing logs: EOF

playground_ubuntu_1 exited with code 0

我的主机操作系统是带有 Docker version 17.12.0-ce, build c97c6d6 的 Ubuntu 16.04。

我的所有其他容器似乎都可以正常启动,但这个容器在启动时完全失败了。

【问题讨论】:

  • 应该添加CMD 来执行某些操作。 'ubuntu:16.04' 图像本身不执行任何操作。
  • @GonzaloMatheu 你能详细说明一下吗?
  • 和~yamenk回答的完全一样。

标签: ubuntu docker docker-compose


【解决方案1】:

这是正常的。当你启动一个容器时,只要容器内启动的主进程还在运行,它就会运行。

此进程是使用 Dockerfile 中的 CMD 命令指定的。 ubuntu 映像没有CMD,因为它旨在用作其他 docker 映像的构建块。 因此,当您在不指定命令的情况下运行此映像时,它会成功退出,从退出代码 0 可以看出。

如果您希望此映像仅在测试时保持活动状态,则可以指定一个使其保持活动状态的命令。

version: '2'
services:
  ubuntu:
    image: 'ubuntu:16.04'
    ports:
      - '22:22'
    command: "tail -f /dev/null"

【讨论】:

    【解决方案2】:

    日志playground_ubuntu_1 exited with code 0 中的退出状态显示其预期。为了使容器长时间运行,您需要为您的容器提供/定义一个前台进程。我暂时编辑了您的撰写文件 -

    version: '2'
    services:
      ubuntu:
        image: 'ubuntu:16.04'
        ports:
          - '22:22'
        command: "tail -f /dev/null"
    

    现在你运行它 -

    $ docker-compose up -d && docker ps

    您的容器现已启动并运行。

    【讨论】:

      【解决方案3】:

      您很可能已经在主机上使用了端口22。尝试将容器22 端口绑定到主机上的另一个端口,例如2222

      version: '2'
      services:
        ubuntu:
          image: 'ubuntu:16.04'
          ports:
            - '2222:22'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-27
        相关资源
        最近更新 更多