我试图启动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
可能缺少什么?
非常感谢您的帮助。我已经被这个问题困扰了一段时间了。
答案 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
$