2015-08-21 86 views
0

我正在尝试将容器中的卷动态安装到主机上,并且它可以正常工作,但存在问题。我使用下面的命令:Docker卷安装问题

docker run -it --name Test1 -v $HOME/.myapp_configs/specificConfig.txt:/bin/specificConfig.txt:rw docker-image /bin/bash 

的问题在于,如果在主机上安装点不存在泊坞窗命令创建它,而是将它root:root,而不是像$USER:$USER我期望的那样。我认为这很可能是Docker确定的命名空间映射问题的直接结果。

有没有人有任何想法,我可以如何强制使用适当的权限创建主机安装点?即

drwxr-xr-x. 3 $USER $USER 31 Aug 21 15:02 ~/.myapp_configs/specificConfig.txt 

的,而不是...

drwxr-xr-x. 3 root root 31 Aug 21 15:02 ~/.myapp_configs/specificConfig.txt 

感谢,

布鲁斯

回答

1

关于确保运行容器之前该文件存在么?

命令可能看起来像:

test -f $HOME/.myapp_configs/specificConfig.txt || touch $HOME/.myapp_configs/specificConfig.txt 
docker run -it --name Test1 -v $HOME/.myapp_configs/specificConfig.txt:/bin/specificConfig.txt:rw docker-image /bin/bash 

解释:如果文件存在

  • ||将执行以下命令

    • test -f <some file>将退出状态0只有当先前的命令退出状态不同于0
    • touch <some file>修改现有文件的修改时间,或(这是我们的情况下)创建一个空文件

    当然,如果你的容器,里面放着一些代码,作用不同的文件是否存在或者没有,那么你将不得不调整该代码来检查文件是否为空

  • +0

    我曾考虑过那一个。唯一的问题是我正在使用docker-compose文件编排多个容器的启动。据我所知,没有办法从撰写文件在主机上执行命令。我可能不得不求助于编写一个安装脚本,该脚本必须在最终用户试图在容器内执行代码之前执行。虽然你的回答并不完全符合我的需求,但对于正常情况来说,这是一个很好的答案。我想我只是异常。 :-) – CompSciGuy139

    +0

    经过进一步研究,目前这是唯一的解决方案。谢谢你的帮助。 – CompSciGuy139