首页 > 解决方案 > 如何在 Docker 容器中设置附加卷的权限?

问题描述

我正在尝试使用名为 volume 的 Docker通过 NFS 卷部署具有持久数据的Prometheus docker 容器。我正在使用 Ansible 进行部署,因此我将发布 Ansible 配置,但我已经使用 Docker 的 CLI 命令执行了相同的操作,并且在这种情况下也会出现问题。

当我部署容器并查看容器docker logs时,我看到它/etc/prometheus已正确共享并附加到容器。但是,/prometheus容器存储相关 DB 和指标的位置会拒绝授予权限。

根据这个答案/prometheus需要对chown任何人进行编辑。这似乎不会在启动时在容器内发生。

这是我的 Ansible 角色创建的卷:

  - name: "Creates named docker volume"
    docker_volume:
        volume_name: prometheus_persist
        state: present
        driver_options: 
            type: nfs
            o: "addr={{ nfs_server }},rw,nolock"
            device: ":{{ prometheus_nfs_path }}"

这相当于这个 Docker CLI 命令:

docker volume create -d local -o type=nfs -o o=addr={{ nfs_server }},rw -o device=:{{ prometheus_nfs_path }} prometheus_persist

这是我的容器部署节

  - name: "Deploy prometheus container"
    docker_container:
        name: prometheus
#        hostname: prometheus
        image: prom/prometheus
        restart_policy: always
        state: started
        ports: 9090:9090
        user: ansible:docker
        volumes:
          - "{{ prometheus_config_path }}:/etc/prometheus"
        mounts:
          - source: prometheus_persist
            target: /prometheus    
            read_only: no
            type: volume        
        comparisons:        
            env: strict

这相当于这个 Docker CLI 命令:

docker run -v prometheus_persist:/prometheus -v "{{ prometheus_config_path }}:/etc/prometheus" -p 9090:9090 --name prometheus prom/prometheus

同样,部署时的容器日志表明权限被拒绝/prometheus。我已经通过prometheus_persist在通用 Ubuntu 容器上安装命名卷进行了测试,它安装得很好,我可以touch在其中文件。关于如何解决这个问题的任何建议?

标签: dockerpromiseansible

解决方案


事实证明,这是 NFS 压缩的问题。就我而言,NFS 导出器是旧的 Synology,不允许no_root_squash设置。但是,将所有用户映射到 NFS 共享上的管理员解决了该问题。


推荐阅读