我正在尝试扩展此具有ansible设置的docker映像,并且至少在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添加到该命令中,则会在同一目录中获得与play用户的会话。
现在,如果我使用其cli工具将该容器推入弹性beantalk中,则会收到以下错误
输出:[CMD-AppDeploy / AppDeployStage0 / AppDeployPreHook / 04run.sh]命令失败,错误代码1:/opt/elasticbeanstalk/hooks/appdeploy/pre/04run.sh b07ae15d619ad90441f6f410a31a7d51885151c92cd8675c5d8e47f63b63dd43退出Docker容器意外地在Sun 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”:权限被拒绝2014/12/21 13:34:33来自守护程序的错误响应:无法启动容器2703462a68a32e8d774e9b4d8cbc3c809e79f53bb1d08f0398b45436d07546a3:exec:“ / home / play / Code”:权限被拒绝
无论我尝试以root用户身份还是play身份开始会话,都会发生这种情况。如果将这个dockerfile推送到弹性beantalk时,我会收到相同的错误,因此它与boot2docker不相关。知道我的权限问题在这里吗?我尝试将目录权限更改为777无效
edit1:以特权身份运行也无济于事
edit2:将dockerfile更改为
FROM ir1sh/dockeractivator
MAINTAINER Mark Moore
EXPOSE 9000
CMD ["bash"]
使我可以在本地运行容器,但在推入弹性Beanstalk后,我又得到了容器退出意外的错误
尝试在本地运行时不使用-it来运行,这可以正确复制在弹性beantalk上运行的方案,因为beantalk不会以交互方式运行容器。一些进程不能很好地处理非交互式外壳。当您将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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句