我正在尝试扩展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之后我得到容器意外再次退出错误
答案 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