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 

回答您的问题“执行入口点脚本后容器是否停止?” 答案是肯定的 如果入口点脚本被执行并且没有其他东西需要被执行,那么容器就会停下来,因为它没有什么可做的。 如果你想让一个容器保持运行,你应该在里面运行一些东西,像脚本一样没有立即结束。

希望能帮助到你。