Docker run无法运行容器

Docker run无法运行容器,docker,microservices,Docker,Microservices,我是docker新手,尝试在AWS免费层帐户t2.micro实例上构建我的第一个docker容器 我能够基于以下Dockerfile构建我的docker FROM java:8 COPY content-service / RUN chmod +x /bin/start.sh CMD bash -C '/bin/start.sh' EXPOSE 8081 MAINTAINER Velu 在收到错误消息后尝试运行容器命令时,它失败并退出 [ec2-user@ip-172-31-30-38

我是docker新手,尝试在AWS免费层帐户t2.micro实例上构建我的第一个docker容器

我能够基于以下Dockerfile构建我的docker

FROM java:8
COPY content-service /
RUN chmod +x /bin/start.sh

CMD bash -C '/bin/start.sh'

EXPOSE 8081

MAINTAINER Velu
在收到错误消息后尝试运行容器命令时,它失败并退出

[ec2-user@ip-172-31-30-38 cis-docker]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
content-service     latest              9fa3ca5a8ac3        10 minutes ago      705.7 MB
docker.io/java      8                   d23bdf5b1b1b        8 months ago        643.1 MB

[ec2-user@ip-172-31-30-38 cis-docker]$ sudo docker --debug run -p 8082:8082 content-service
DEBU[0000] framesize: 18
Starting service.
DEBU[0000] Corrupted prefix: []
DEBU[0000] [hijack] End of stdout

任何帮助都将不胜感激。

我通过复制一个简单的shell脚本来运行docker文件,该脚本将“hello”打印到控制台上。它成功地运行了

此外,docker容器似乎没有退出。Docker正在运行您的shell脚本并优雅地退出。要进行验证,请在docker运行完成后立即运行以下命令,以检查docker运行命令的退出代码

echo$?

如果上述命令在屏幕上打印“0”,则docker没有失败

如果希望shell脚本作为后台守护程序运行,则需要确保脚本不会退出。docker容器在您的Dockerfile的CMD行中指定的shell脚本完成执行后立即退出的原因是因为docker的设计理念是运行。在您的情况下,单个进程就是您的shell脚本。因此,在shell脚本中启动任何服务作为前台进程,只要该服务还在运行,容器就会一直运行。一旦该服务消失,您的容器就会消失,这正是您可能想要的


希望对您有所帮助。

我发现并解决了此问题

在我的start.sh脚本的最后一行中,我在下面一行看到了这个

java -cp $CLASS_PATH $JVM_OPTIONS $CLASS_NAME ${ARGUMENTS[@]} & echo $! > $PID_FILE
在那行中,我确实删除了这个&echo$!>$PID_文件

工作:

  java -cp $CLASS_PATH $JVM_OPTIONS $CLASS_NAME ${ARGUMENTS[@]} 

-C
更改为
-C
,以及
/bin/start.sh的内容