我是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
任何帮助都将不胜感激。
答案 0 :(得分:0)
我通过复制一个简单的shell脚本来运行您的docker文件,该脚本打印" hello"在控制台上。它运行成功。
此外,您的docker容器似乎不会退出。 Docker正在运行您的shell脚本并正常退出。要验证,请在docker运行完成后立即运行以下命令,检查docker run命令的退出代码。
echo $?
如果上面的命令打印" 0"在屏幕上然后码头没有失败。
如果您希望shell脚本作为后台守护程序运行,则需要确保脚本不会退出。在您的Dockerfile完成执行的CMD行中指定shell脚本后,docker容器退出的原因是因为Docker的设计理念是运行one process per container。在您的情况下,单个进程是您的shell脚本。因此,将您在shell脚本中启动的任何服务作为前台进程启动,只要该服务正在运行,容器就会继续运行。一旦该服务死亡,您的容器就会死亡,这是您可能想要的。
希望有所帮助。
答案 1 :(得分:0)
我发现并解决了这个问题。
在我的 start.sh 脚本的最后一行,我在下面这行。
java -cp $CLASS_PATH $JVM_OPTIONS $CLASS_NAME ${ARGUMENTS[@]} & echo $! > $PID_FILE
在那行中,我确实删除了&回声$! > $ PID_FILE ,
<强>工作:强>
java -cp $CLASS_PATH $JVM_OPTIONS $CLASS_NAME ${ARGUMENTS[@]}