Docker 持久卷没有权限 (Apache Solr)

标签 docker solr docker-compose file-permissions docker-volume

我的 docker-compose.yml :

solr:
    image: solr:8.6.2
    container_name: myproject-solr
    ports:
     - "8983:8983"
    volumes:
      - ./data/solr:/var/solr/data
    networks:
      static-network:
        ipv4_address: 172.20.1.42
使用 docker-compose up -d --build 启动 docker 后,solr 容器已关闭,日志 ( docker logs myproject-solr ) 显示:
Copying solr.xml
cp: cannot create regular file '/var/solr/data/solr.xml': Permission denied
我注意到如果我在我的机器上授予数据目录 sudo chmod 777 ./data/solr/ -R 的完全权限我再次运行 Docker,一切都很好。
我猜问题出现在 solr 时用户不是我的机器,因为 Docker 创建了 data/solr文件夹 root:root .有我的 ./data文件夹 gitignored,我无法管理这些文件夹权限。
我想知道一种解决方法来正确管理权限以保留数据

最佳答案

这是 docker-compose 的一个已知“问题”:由 Docker 引擎创建的所有文件都归 root:root 所有。通常它通过以下两种方式之一解决:

  • 提前创建卷。在您的情况下,您可以使用适当的权限提前创建 ./data/solr 目录。您可以让任何人都可以访问它,或者更好地将其所有者更改为 solr用户。 solr用户和组 ID 被硬编码在 solr 图像中:8983 ( Dockerfile.template )

  • mkdir -p ./data/solr
    sudo chown 8983:8983 ./data/solr
    
  • 如果你想避免在 docker-compose 之前运行额外的命令,你可以创建额外的容器来修复权限:

  • version: "3"
    
    services:
    
      initializer:
        image: alpine
        container_name: solr-initializer
        restart: "no"
        entrypoint: |
          /bin/sh -c "chown 8983:8983 /solr"
        volumes:
          - ./data/solr:/solr
        
      solr:
        depends_on: 
          - initializer
        image: solr:8.6.2
        container_name: myproject-solr
        ports:
         - "8983:8983"
        volumes:
          - ./data/solr:/var/solr/data  
        networks:
          static-network:
            ipv4_address: 172.20.1.42
    

    关于Docker 持久卷没有权限 (Apache Solr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63993993/

    相关文章:

    php - 找不到Docker命令中Alpine下的PHP7

    java - 如何将主 Solr 服务器(基于查询)的部分索引导入到另一个 Solr 服务器,然后稍后进行增量导入(更新后的索引)?

    python - 当我构建 Docker 文件时,出现错误 The 'make' utility is missing from PATH

    solr - 复制字段链

    search - Indexwriter 类中的 Forcemerge 函数

    networking - 如何使用 docker-compose+docker-swarm+overlay 网络发现缩放的容器主机?

    docker - 是否可以为具有相同配置的多个容器制作通用的 dockerfile?

    python-3.x - 在Docker中从源代码构建numpy

    Docker RUN 找不到可执行文件

    security - 如何处理 docker 容器中的安全更新?