Docker-compose运行Alpine 镜像启动失败
先放结果
设置tty: true
选项
如:
version: '3'
services:
alpine:
image: alpine
container_name: alpine
tty: true
过程说明
今天使用docker-compose编排工具尝试运行一个空白的Alpine容器服务.
本计划使用最简单设置.但是遇到了启动失败的情况,但是手动使用docker run
又可以执行.问题有点蹊跷.
初始docker-compose.yml文件内容如下:
version: '3'
services:
alpine:
image: alpine
container_name: alpine
这本来是一个足够简单的启动配置了.但是竟然启动失败了.并且使用docker logs
还看不到日志输出.这就说明启动时的第一个命令就直接失败了.
下面是手动执行命令:
docker run -dit --name alpine alpine
结果这样容器就可以正常启动起来了.
后来到QQ群里面求助,又网友建议修改docker-compose文件如下:
version: '3'
services:
alpine:
image: alpine
container_name: alpine
command: /bin/sh -c "while true;do sleep 3600;done"
这样也可以正常运行.问题暂时得到了解决.但是原因依然不知道.
接下来,又查了一下docker-compose的写法.偶然看到有个配置项:tty: true
突然灵光一现,会不会是因为没设置这一项导致的?
仔细一想,确实有可能,因为在docker run
命令中有指定-t
选项.而这样是可以成功的.
试了一下,果然可以!
version: '3'
services:
alpine:
image: alpine
container_name: alpine
tty: true
# command: /bin/sh -c "while true;do sleep 3600;done"
于是,这就说明之前不能成功的原因就在这里了.因为容器启动时,会运行命令:/bin/sh
但是后面没有指定任何内容,且没有设置虚拟控制台常驻.因为这个命令一瞬间就执行成功并退出了.后来在命令后面加上了死循环,也就是命令不会结束,容器也就可以一直运行了。而docker run
因为有选项指定常驻,其实是和tty: true
等效的。
又明白了一点东西。