尝试运行docker-compose的archlinux映像,但是它刚刚退出,代码为0

时间:2019-04-28 07:52:31

标签: docker docker-compose archlinux

我试图启动archlinux映像,然后再添加卷,以便可以在配置Arch Linux时测试我的脚本。但是我坚持开始撰写。如果我已经重新启动:当我注释掉它时,它总是一直重新启动,然后它以代码0退出。

version: "3.7"

services:
  arch:
    image: archlinux/base
    # restart: always

我开始写作

$docker-compose up

输出为

Creating network "docker-compose_default" with the default driver
Creating docker-compose_arch_1 ... done
Attaching to docker-compose_arch_1
docker-compose_arch_1 exited with code 0

可能缺少什么?

非常感谢您的帮助。我已经被这个问题困扰了一段时间了。

2 个答案:

答案 0 :(得分:0)

它是因为archlinux具有CMD[/usr/bin/bash] https://github.com/archlinux/archlinux-docker/blob/master/Dockerfile,这意味着您必须指定任何长时间运行的任务以使容器运行,否则它将退出,例如,您可以将参数传递给bash(例如while循环)以使其保持运行运行。

version: "3.7"

services:
  arch:
    image: archlinux/base
    command:
     - "while(true); do sleep 5; done"

答案 1 :(得分:0)

executes /usr/bin/bash as a default command时您正在使用的基本映像,需要分配tty才能继续运行(否则,您必须将命令更改为任何长时间运行的任务)。

首先查看docker本身会发生什么。

以交互方式启动容器的工作符合预期:

$ docker run -it --rm archlinux/base
[root@6642c519e328 /]# more /etc/issue 
Arch Linux \r (\l)

[root@6642c519e328 /]# exit

现在让我们尝试在后台运行容器:

$ docker run -d --name testarch archlinux/base
915ff11b0c93bd795eb62d37cd2d9928638560d9accfb2e5ba061b3ef19c0235
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$ # Hoho, it's not running
$ docker ps -a
CONTAINER ID        IMAGE                                               COMMAND                 CREATED             STATUS                     PORTS               NAMES
915ff11b0c93        archlinux/base                                      "/usr/bin/bash"         8 seconds ago       Exited (0) 7 seconds ago                       testarch
$ docker rm testarch 
testarch

如果我们对tty分配做同样的事情:

$ docker run -d --tty --name testarch archlinux/base
d160a3d7e18c3d094f47577b448a11808eb30ce7ba8fad4cde882818f248f207
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d160a3d7e18c        archlinux/base      "/usr/bin/bash"     5 seconds ago       Up 4 seconds                            testarch
$ # Tada ! It runs, we can now attach to it.
$ docker exec -it testarch bash
[root@d160a3d7e18c /]# more /etc/issue
Arch Linux \r (\l)

[root@d160a3d7e18c /]# exit
$ docker rm -f testarch

现在返回您的docker-compose.yml。在当前测试阶段,您需要分配一个tty(如果您的cmd / entry-point不再需要它,则可以稍后删除)。

version: "3.7"

services:
  arch:
    image: archlinux/base
    tty: true

暂时,bash命令未在容器日志中发送任何内容。我将以分离模式启动,因此一旦容器启动,命令将返回,并且我可以使用同一终端(如果仍要在前台模式下运行docker-compose,则启动第二个终端)

$ pwd
/tmp/slack_test
$ docker-compose up -d
Creating network "slack_test_default" with the default driver
Creating slack_test_arch_1 ... done
$ docker-compose exec arch bash
[root@10f138d98782 /]# more /etc/issue 
Arch Linux \r (\l)

[root@10f138d98782 /]# exit
exit
$ docker-compose down
Stopping slack_test_arch_1 ... done
Removing slack_test_arch_1 ... done
Removing network slack_test_default
$ 
相关问题