我正在尝试扩展使用ansible设置的this docker image并至少在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用户进行 session 。如果我将-u play添加到该命令中,则会在同一目录中获得与play用户的 session 。
现在,如果我使用其cli工具将该容器推入 flex beantalk中,则会收到以下错误
日志不是很有启发性
现在,根据另一个建议,我的docker文件中没有CMD或ENTRYPOINT,所以我添加了它们。
FROM ir1sh/dockeractivator
MAINTAINER Mark Moore
EXPOSE 9000
ENTRYPOINT ["/home/play/Code", "-DFOREGROUND"]
CMD []
图像已构建,但是现在当我尝试使用与上述相同的选项运行docker时,我得到了
无论我尝试以root用户身份还是play身份开始 session ,都会发生这种情况。如果将这个dockerfile推送到 flex beantalk时,我会收到相同的错误,因此它与boot2docker不相关。知道我的权限问题在这里吗?我尝试将目录权限更改为777无效
edit1:以特权身份运行也无济于事
edit2:将dockerfile更改为
FROM ir1sh/dockeractivator
MAINTAINER Mark Moore
EXPOSE 9000
CMD ["bash"]
使我可以在本地运行容器,但在推入 flex Beanstalk后,我又得到了容器退出意外的错误
最佳答案
尝试在本地运行时不使用-it来运行,这可以正确复制在 flex beantalk上运行的方案,因为beantalk不会以交互方式运行容器。一些进程不能很好地处理非交互式 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那样被覆盖。也就是说,我可以docker运行以下命令来更改ls命令将列出的目录,但是我无法更改此容器将要运行ls命令的事实
docker run -it myContainer /tmp
关于playframework-2.0 - docker 和弹性beantalk容器意外停止,权限被拒绝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27589943/