linux - Docker 卷安装问题

标签 linux permissions docker volumes

我正在尝试将卷从容器动态挂载到主机,它可以工作,但有一个问题。我正在使用以下命令:

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

问题在于,如果主机上的挂载点不存在,docker 命令会创建它但将其分配给 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 

谢谢,

布鲁斯

最佳答案

在运行容器之前确保文件存在怎么样?

命令可能如下所示:

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>修改现有文件的修改时间,或者(这是我们的情况)创建一个空文件

当然,如果您的容器内有一些代码,无论文件是否存在 都会采取不同的行为,那么您将不得不调整该代码以检查文件是否为空 相反。

关于linux - Docker 卷安装问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32148445/

相关文章:

security - Sharepoint:如何以编程方式管理 SPFolder 和 SPListItem 权限

linux - 为什么我的 'touch'可以写保护文件?

java - 在编写时也使 java 中新创建的文件不可读

r - 使用shinyFiles进行文件夹选择在更新后停止工作

docker - 如何使用 Dockerfile 中的单个 COPY 层复制不同源目录和目标目录中的多个文件

linux - Logrotate 在特定天数后不删除文件

java - 如何在没有 X11 的情况下从 Linux 控制台触发手动 Java GC

docker - Kubernetes 中的项目级方法是什么?

c - fork() - 让父进程工作而不等待子进程

python - 如何在不绑定(bind) IP 的情况下在特定端口上运行服务