Docker容器在定义入口点时重新启动
我试图运行一个shell脚本作为我的docker容器中的入口点。 为此,我在Dockerfile中定义了一个入口点
abc.Dockerfile
FROM ubuntu COPY abc.sh / RUN chmod +x /abc.sh ENTRYPOINT /abc.sh
Dockerfile被成功构build,但是在exec
到容器中时,我得到一个错误:
$ docker exec -it drupaldocker_myapp_1 bash Error response from daemon: Container ca32bafe2247e51d5e9b1a8f0cf83457ccecb29e8ff9747a8c98aa6a046b0550 is restarting, wait until the container is running
docker的输出ps:
Raghav-Macbook:iflychat-server-development-system raghav$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ca32bafe2247 drupaldocker_myapp "/bin/sh -c \"/abc.sh\"" 9 minutes ago Restarting (0) 2 minutes ago drupaldocker_myapp_1
我的docker-compose.yml看起来像
version: '2' services: myapp: build: context: . dockerfile: abc.Dockerfile restart: always tty: true
abc.sh
#!bin/sh ls cat /abc.sh
另外, docker-compose up
没有给我错误。 输出看起来像
Raghav-Macbook:drupal-docker raghav$ docker-compose up Recreating drupaldocker_myapp_1 Attaching to drupaldocker_myapp_1 myapp_1 | oot etc lib media opt root sbin sys usr myapp_1 | bin dev home lib64 mnt proc run srv tmp var myapp_1 | #!bin/sh myapp_1 | myapp_1 | ls
我应该做些什么才能做到这一点?
编辑
docker logs drupaldocker_myapp_1
输出docker logs drupaldocker_myapp_1
abc.sh boot etc lib media opt root sbin sys usr bin dev home lib64 mnt proc run srv tmp var #!bin/sh ls cat /abc.shabc.sh boot etc lib media opt root sbin sys usr bin dev home lib64 mnt proc run srv tmp var #!bin/sh ls cat /abc.sh
编辑2
一旦执行入口点脚本,容器是否会停止?
我想你想要的是docker运行而不是docker执行命令。 Docker exec是在一个已经部署好的正在运行的容器上启动一些东西,而你想要的是在部署后启动一个脚本。
修改你的Dockerfile。 在最后一行使用这个来代替入口点:
CMD ["bash", "-c", "/abc.sh"]
使用此命令运行它,脚本将自动启动:
docker run -it drupaldocker_myapp_1
如果你把bash
放在docker run命令的最后,你会在容器中得到一个交互式的bash控制台,但是可以避免自动启动脚本:
docker run -it drupaldocker_myapp_1 bash
回答您的问题“执行入口点脚本后容器是否停止?” 答案是肯定的 如果入口点脚本被执行并且没有其他东西需要被执行,那么容器就会停下来,因为它没有什么可做的。 如果你想让一个容器保持运行,你应该在里面运行一些东西,像脚本一样没有立即结束。
希望能帮助到你。