Docker运行失败,无法运行容器。

3

我是新手,尝试在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

感谢您的帮助。


将“-C”更改为“-c”,并且还需要知道“/bin/start.sh”的内容。 - Tarun Lalwani
2个回答

1
我发现并解决了这个问题。
在我的 start.sh 脚本的最后一行,我有以下这行代码。
java -cp $CLASS_PATH $JVM_OPTIONS $CLASS_NAME ${ARGUMENTS[@]} & echo $! > $PID_FILE

在这行代码中,我删除了& echo $! > $PID_FILE

工作原理:

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

1
我通过复制一个简单的shell脚本来运行你的docker文件,该脚本在控制台上打印“hello”,并成功运行。
此外,似乎你的docker容器没有退出。Docker正在运行你的shell脚本,并正常退出。要验证,请在docker运行完成后立即运行以下命令检查docker运行命令的退出代码:
echo $?
如果上述命令在屏幕上打印“0”,则docker没有失败。
如果你希望你的shell脚本作为后台守护进程运行,你需要确保你的脚本不会退出。Docker的设计哲学是每个容器运行一个进程,因此在你的情况下,这个单一进程就是你的shell脚本。所以,将你启动的任何服务作为前台进程启动,容器将持续运行,只要该服务正在运行。一旦该服务停止,你的容器也会停止,这可能是你想要的。
希望这能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接