退出代码0 docker

Syl*_*.J. 14 docker boot2docker docker-compose docker-machine

我正在尝试使用docker-compose服务启动容器.但不幸的是,容器退出了whith代码0.由于存储库来自.tar.gz存档,因此构建容器.此存档是Centos VM.

我想从同一档案中创建6个容器.而不是键入6次docker命令,我想创建一个docker-compose.yml文件,我可以在其中汇总他们的命令和标记.

我已经开始编写docker-compose.yml文件,只是为了创建一个容器.

这是我的docker-compose.yml:

version: '2'
services:
  dvpt:
   image: compose:test.1
   container_name: cubop1
   command: mkdir /root/essai/
   tty: true
Run Code Online (Sandbox Code Playgroud)

不要注意命令,因为我只需要指定一个命令.

所以我的问题是,为什么容器正在退出?还有另一种解决方案可以同时构建这些容器吗?

谢谢你的回复.

shg*_*Inc 27

你可以用像 tail -f /dev/null 这样的命令结束

它通常在我的 docker-compose.yml 中使用

command: tail -f /dev/null

很容易看出我是如何保持容器运行的。

docker ps

  • 很棒的一个,它永远运行,很好 (2认同)

Leo*_*ipe 25

使用 -d 在后台运行您的 docker

$ docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

并在 docker-compose.yml 添加:

mydocker:
    tty: true
Run Code Online (Sandbox Code Playgroud)

  • 你能告诉我tty是什么吗? (6认同)
  • 这就是答案。我认为 tty 是简短的“电传打字机”,实际上它只是意味着终端/命令行。 (2认同)

And*_*inn 24

答案实际上是第一个评论.我会稍微解释一下米格尔的评论.

首先,我们需要了解Docker容器运行单个命令.只要该命令启动的进程正在运行,容器就会运行.一旦完成该过程并退出,则容器将停止.

有了这种理解,我们就可以假设你的情况发生了什么.当您启动dvpt服务时,它会运行该命令mkdir /root/essai/.该命令创建文件夹然后退出.此时,Docker容器已停止,因为该进程已退出(状态为0,表示已mkdir完成但没有错误).

  • -1,因为你没有给出正确的解决方案,只是在评论中只有解释本身.用可能的解决方案更新答案,我会改变主意. (7认同)
  • 谢谢安迪,你救了我的命。就我而言,我刚刚在实际命令的末尾添加了长时间运行的命令: > bash -c "actual-command && tail -f /dev/null" (3认同)
  • 由于最初的问题没有给出他们想要作为守护进程运行的任何命令,那么在这种情况下什么是一个很好的例子? (3认同)
  • 这个答案非常合理,准确地描述了这个问题.mkdir命令立即退出,成功或失败,导致容器立即退出.解决方案是不要使用mkdir作为入口点,根据用例可以通过多种方式完成. (2认同)

小智 14

我们遇到了一个问题,其中两个客户端服务(vitejs)以代码 0 退出。我添加了 tty: true 并且它开始工作。

dashboard:
    tty: true
    container_name: dashboard
    expose:
      - 8001
    image: tilt.dev/dashboard
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dashboard.tls=true"
      - "traefik.http.routers.dashboard.entrypoints=web"
      - "traefik.http.routers.dashboard-wss.tls=true"
      - "traefik.http.routers.dashboard-wss.entrypoints=wss"
Run Code Online (Sandbox Code Playgroud)