Docker运行无法运行容器

时间:2017-09-15 20:37:18

标签: 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 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

任何帮助都将不胜感激。

2 个答案:

答案 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[@]}