我正在尝试使用docker.bintray.io/jfrog/artifactory-oss:4.11.1
Docker version 1.9.1, build a34a1d5
他们的指南建议将数据和配置文件夹映射到主机以使其持久化,这是公平的建议:https://www.jfrog.com/confluence/display/RTF/Running+with+Docker#RunningwithDocker-RunningArtifactoryasaDockerPrivateRegistry
问题是容器无法启动。它抱怨已装入卷中的文件无法在已装入卷中创建特定于工件的文件夹和文件
/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-machine VM上,我可以访问它们......
答案 0 :(得分:2)
当您挂载当前不存在的主机卷时,该文件夹将创建为root权限并使用root权限挂载(使用默认的umask,即755)。修复是在清理步骤之后创建数据,日志等文件夹,并使用可以写为容器uid的权限对它们进行配置。
以下是您查看问题的示例:
$ 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 ..
要在rm
和docker 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
请注意,第二个命令不建议用于多用户环境,它允许任何人读取和写入该文件夹。更好的解决方案是将所有者更改为容器使用的uid,用户的gid和模式775,或者将主机用户添加到具有相同权限的容器内的gid。但如果您不想在单个用户系统上进入uid和gid复杂性,777就是快速解决方案。
编辑:在MacOS或Windows上使用Docker时,您还需要确保将作为主机卷安装到容器中的文件夹也从Mac / Win机器共享到Docker Linux VM中。在Docker for Windows和Docker for Mac中是一个用于调整共享驱动器或目录的设置菜单。在MacOS上,请注意目录名称的大小写。