gpt4 book ai didi

macos - 为什么docker容器不能在挂载的文件夹中创建文件夹

转载 作者:行者123 更新时间:2023-12-02 18:05:17 26 4
gpt4 key购买 nike

我正在尝试开始 docker.bintray.io/jfrog/artifactory-oss:4.11.1在 MacOS 上使用 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 上,我可以访问它们...

最佳答案

当您挂载当前不存在的主机卷时,该文件夹将创建为并挂载具有 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

请注意,不建议将第二个命令用于多用户环境,它允许任何人读取和写入文件夹。更好的解决办法是将owner改为容器使用的uid、用户的gid、模式775,或者将host用户添加到容器内部的gid中,具有相同的权限。但是如果您不想在单用户系统上陷入 uid 和 gid 的复杂性,777 是快速的解决方案。

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

关于macos - 为什么docker容器不能在挂载的文件夹中创建文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39020318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com