docker和elastic beanstalk容器意外停止并且权限被拒绝

时间:2014-12-21 13:46:28

标签: playframework-2.0 docker elastic-beanstalk

我正在尝试扩展this docker image至少已配置ansible并在docker hub上成功构建,此图像的一部分包括一个名为play的用户,该用户拥有一个名为/ home / play / Code的目录有755权限。我在mac上使用boot2docker

这是我的本地docker文件

FROM ir1sh/dockeractivator
MAINTAINER Mark Moore
EXPOSE 9000

构建正常,当我运行时

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

容器正确启动,我从/ home / play / Code开始与用户root进行会话。如果我添加-u play到该commade,我会在播放用户的同一目录中找到一个会话。

现在,如果我用cli工具将该容器推到弹性beanstalk,我会收到以下错误

  

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

日志不是很有启发性

现在根据另一个建议,我的docker文件中没有CMD或ENTRYPOINT,所以我添加了这些。

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

图像构建但现在当我尝试使用与上面相同的选项运行docker时,我得到了

  

exec:“/ home / play / Code”:permission denied2014 / 12/21 13:34:33错误   来自守护进程的响应:无法启动容器   2703462a68a32e8d774e9b4d8cbc3c809e79f53bb1d08f0398b45436d07546a3:   exec:“/ home / play / Code”:许可被拒绝

无论我是尝试以root用户还是以播放方式启动会话,都会发生这种情况。如果我把这个dockerfile推送到弹性beanstalk,我得到同样的错误,所以它与boot2docker无关。知道我的权限问题在这里吗?我已经尝试将目录权限更改为777无效

edit1:以特权身份运行也无济于事

edit2:将dockerfile更改为

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

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

1 个答案:

答案 0 :(得分:1)

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

我还认为你还不清楚EntryPoint和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