2014-12-21 25 views
2

我试图扩展this docker image,它至少在docker hub上成功提供并成功创建,该图像的一部分包含一个名为play的用户,该用户拥有一个名为/ home/play的目录/拥有755个权限的代码。我使用的是Macdocker和elastic beanstalk容器意外停止并且权限被拒绝

这boot2docker是本地我的搬运工文件

FROM ir1sh/dockeractivator 
MAINTAINER Mark Moore 
EXPOSE 9000 

它建立确定,当我运行

docker run --rm -it -v "/my/local/dir:/home/play/Code" -p 9000:9000 300b01a6199c 

容器正确启动和我得到root用户启动一个会话在/ home/play/Code中。如果我添加了-u play to commade,我将与玩家用户进行会话,而不是在同一个目录中。

现在,如果我把该容器弹性豆茎与他们的CLI工具,我得到以下错误

输出:CMD-AppDeploy/AppDeployStage0/AppDeployPreHook/04run.sh] 命令,错误代码1失败: /opt/elasticbeanstalk/hooks/appdeploy/pre/04run.sh b07ae15d619ad90441f6f410a31a7d51885151c92cd8675c5d8e47f63b43dd95 泊坞容器推出后意外退出:泊坞容​​器退出 意外地在Sun 12月21日13时36分06秒UTC 2014 :.检查快照日志 细节..

日志是不是很有启发

现在每另一个建议,我没有一个CMD或入口点在我的搬运工文件,所以我想补充的。

FROM ir1sh/dockeractivator 
MAINTAINER Mark Moore 
EXPOSE 9000 
ENTRYPOINT ["/home/play/Code", "-DFOREGROUND"] 
CMD [] 

的形象建立,但现在当我尝试使用相同的选项泊坞窗如上运行的我得到

高管: “/家/播放/代码”:允许denied2014/12月21日13: 34:33错误从守护 响应:无法启动容器 2703462a68a32e8d774e9b4d8cbc3c809e79f53bb1d08f0398b45436d07546a3: EXEC: “/家/播放/代码”:权限被拒绝

这种情况wheth呃我尝试以root或play的方式开始会话。如果我将这个dockerfile推送到弹性beanstalk,所以它与boot2docker无关任何想法我的权限问题在这里?我试图改变该目录的权限为777无济于事

EDIT1:运行的特权也于事无补

EDIT2:改变dockerfile到

FROM ir1sh/dockeractivator 
MAINTAINER Mark Moore 
EXPOSE 9000 
CMD ["bash"] 

允许我在本地运行的容器,但推后弹性beanstalk我得到容器退出意外错误再次

回答

1

尝试运行时没有 - 当你在本地运行,这适当地复制弹性beanstalk上运行的场景,因为beanstalk不会ru在交互模式下的容器。有些进程不能很好地处理非交互式shell。当您使用bash作为您的CMD时,情况确实如此。在非交互模式下,bash shell将立即退出。

我也认为你仍然不清楚什么是入口点和CMD,我看到/home/play/Code是一个目录,总是需要的第一个字符串是一个可执行文件。

例如,如果您有ENTRYPOINT [“A”,“B”]和CMD [“C”,“D”],则相当于在终端A B C D上发出以下命令。一个更好的例子是:

ENTRYPOINT ["ls","-a","-l"] 
CMD ["/var/log"] 

# This maps too 
ls -a -l /var/log 

你有两个选项ENTRYPOINT的原因不能在运行时重写,因为CMD可以。即我可以泊坞窗运行下面的更改ls命令将列出目录,但我不能改变这个容器是怎么回事,当我离开了 - 它运行一个ls命令

docker run -it myContainer /tmp 
+1

这样的事实和尝试运行,它不会与会话进入容器,当我运行docker ps时,它显示没有正在运行的容器,因此听起来像您的怀疑是正确的。所以我不确定入口点和cmd的目的。基本上我只是想让这个容器启动,然后我想用其他方法来调配剩余的容器。我可以在本地手工踢人,并计划使用.ebextensions命令在elasticbeanstalk上做到这一点 – Ir1sh

+0

是否有一个命令,我可以代替bash命令,只是没有做任何事情,让conatiner运行? – Ir1sh

+1

码头日志[CONTAINER_NAME/ID]应该告诉您发生了什么事情的容器死亡。它在这种情况下可能不是很有用,因为通常不处理无头模式的进程也不会很好地记录。 tail -f/some/log/file会让容器继续运行,然后你可以使用docker exec -it bash来进入它 –