为什么docker容器不能在安装的文件夹中创build文件夹

我试图启动docker.bintray.io/jfrog/artifactory-oss:4.11.1在MacOS上使用Docker version 1.9.1, build a34a1d5

他们的指南build议将数据和configuration文件夹映射到主机,使其持久这是公平的build议: https : //www.jfrog.com/confluence/display/RTF/Running+with+Docker#RunningwithDocker-RunningArtifactoryasaDockerPrivateRegistry

问题是容器不能启动。 它抱怨来自已装入卷的文件,它不能在装入卷中创build特定于文件的文件夹和文件

 /usr/bin/java Starting Artifactory tomcat as user artifactory... Max number of open files: 1048576 Using ARTIFACTORY_HOME: /var/opt/jfrog/artifactory Using ARTIFACTORY_PID: /var/opt/jfrog/run/artifactory.pid touch: cannot touch `/opt/jfrog/artifactory/tomcat/logs/catalina.out': Permission denied /opt/jfrog/artifactory/tomcat/bin/catalina.sh: line 401: /opt/jfrog/artifactory/tomcat/logs/catalina.out: Permission denied ** ERROR: Artifactory Tomcat server did not start. Please check the logs 

我的docker命令如下所示:

 export ARTIFACTORY_HOME=$HOME/local.artifactory # just cleanup for now rm -rf $ARTIFACTORY_HOME docker run -d --name local.artifactory \ --hostname local.artifactory \ --privileged=true \ -p 80:80 \ -p 8081:8081 \ -p 443:443 \ -v $ARTIFACTORY_HOME/data:/var/opt/jfrog/artifactory/data \ -v $ARTIFACTORY_HOME/logs:/var/opt/jfrog/artifactory/logs \ -v $ARTIFACTORY_HOME/backup:/var/opt/jfrog/artifactory/backup \ -v $ARTIFACTORY_HOME/etc:/var/opt/jfrog/artifactory/etc \ docker.bintray.io/jfrog/artifactory-oss:4.11.1 

当我将安装的卷设置为/ tmp时

export ARTIFACTORY_HOME=/tmp/local.artifactory

docker集装箱启动,但我的坐骑出现在docker机VM上,我可以访问它们…

当你挂载一个目前不存在的主机卷时,这个文件夹将被创build并以root权限(使用默认的umask,即755)进行挂载。 修复方法是在清理步骤后创build数据,日志等…文件夹,并使用可写入容器的权限configuration它们。

以下是您遇到问题的示例:

 $ docker run -v $HOME/data/docker/test-missing:/missing -u 100 --rm -it busybox / $ ls -al /missing total 8 drwxr-xr-x 2 root root 4096 Aug 18 19:18 . drwxr-xr-x 19 root root 4096 Aug 18 19:18 .. / $ touch /missing/file touch: /missing/file: Permission denied / $ exit $ ls -al $HOME/data/docker/test-missing/ total 8 drwxr-xr-x 2 root root 4096 Aug 18 15:18 . drwxr-xr-x 31 bmitch bmitch 4096 Aug 18 15:18 .. 

rmdocker run之间添加的行可以修复脚本:

 mkdir -p $ARTIFACTORY_HOME/data $ARTIFACTORY_HOME/logs \ $ARTIFACTORY_HOME/backup $ARTIFACTORY_HOME/etc chmod -R 777 $ARTIFACTORY_HOME/data $ARTIFACTORY_HOME/logs \ $ARTIFACTORY_HOME/backup $ARTIFACTORY_HOME/etc 

请注意,第二个命令不build议用于多用户环境,它允许任何人读取和写入文件夹。 更好的解决scheme是将所有者更改为容器使用的uid,用户gid和模式775,或者将主机用户添加到容器内的gid,并具有相同的权限。 但是如果你不想在单个用户系统上使用uid和gid复杂性,777就是快速解决scheme。


编辑:在MacOS或Windows上使用Docker时,还需要确保将作为主机卷装入容器的文件夹也从Mac / Win计算机共享到Docker Linux VM。 Docker for Windows和Docker for Mac是一个设置菜单,用于调整共享驱动器或目录。 在MacOS上,请注意目录名称的情况。

将nfs挂载点共享为一个卷时,我遇到同样的问题。 这解决了它:

 docker-compose up --force-recreate 

希望能解决你的问题!