Linux Docker容器可以';无法从主机访问映射的目录

Linux Docker容器可以';无法从主机访问映射的目录,linux,docker-compose,centos,grafana,influxdb,Linux,Docker Compose,Centos,Grafana,Influxdb,我在CentOS环境中运行grafana和influxdb容器,但当我启动容器时,两者都表示无法在映射目录上创建文件 我有同样的环境在Ubuntu上运行,没有任何问题 我已经把目录翻到472:472了 我已经在docker-compose.yml中映射了所有者的用户Id(在ubuntu中解决了这个问题) 我的点子快用完了 下面是启动容器的命令 CURRENT_UID=$(id -u):$(id -g) docker-compose -f /home/rastreamento/docker-com

我在CentOS环境中运行grafana和influxdb容器,但当我启动容器时,两者都表示无法在映射目录上创建文件

我有同样的环境在Ubuntu上运行,没有任何问题

我已经把目录翻到472:472了 我已经在docker-compose.yml中映射了所有者的用户Id(在ubuntu中解决了这个问题) 我的点子快用完了

下面是启动容器的命令

CURRENT_UID=$(id -u):$(id -g) docker-compose -f /home/rastreamento/docker-compose.yml up -d
以下是在ubuntu上运行良好的docker composer的yml:

version: '3'

services:
  grafana:
    image: "grafana/grafana"
    environment:
     - WORKING_DIR=/var/lib/grafana/working_dir
     - GF_SECURITY_DISABLE_GRAVATAR=true
     - GF_DEFAULT_INSTANCE_NAME=Valid
     - GF_SERVER_DOMAIN=200.166.40.21
     - GF_SERVER_ENFORCE_DOMAIN=false
     - GF_SERVER_ROOT_URL=http://200.166.40.21
     - GF_ANALYTICS_CHECK_FOR_UPDATES=false
     - GF_USERS_ALLOW_SIGN_UP=false
     - GF_USERS_VIEWERS_CAN_EDIT=false
    ports:
     - "1982:3000"
    volumes:
     - /home/dev/grafana:/var/lib/grafana
    links:
     - influxdb
    networks: 
      backend:
        ipv4_address: 172.20.0.3
    restart: unless-stopped
    depends_on:
     - influxdb
    user: ${CURRENT_UID}
  influxdb:
    image: "influxdb"
    environment:
     - INFLUXDB_ADMIN_ENABLED=true
     - INFLUXDB_DATA_MAX_SERIES_PER_DATABASE=0
     - INFLUXDB_DATA_MAX_VALUES_PER_TAG=0
    ports:
     - "8086:8086"
     - "8083:8083"
    volumes:
     - /home/dev/influxdb:/var/lib/influxdb
    networks: 
      backend:
        ipv4_address: 172.20.0.2
    restart: unless-stopped
    user: ${CURRENT_UID}
networks:
  backend:
    driver: bridge
    ipam:
      config:
      - subnet: 172.20.0.0/24
下面是运行Grafana的容器的一个输出

grafana|u 1 | mkdir:无法创建目录 “/var/lib/grafana/plugins”:权限被拒绝

XDB输出:

influxdb| 1 |运行:创建服务器:mkdir所有:mkdir /var/lib/xdb/meta:权限被拒绝

经过两天的研究,我现在已经没有主意了

谢谢

编辑1:

根据Jan Garaj的要求,码头工人信息如下: 另外,我更改了希望的主机映射,以使容器能够运行和访问它的bash

码头工人信息

文件系统权限

格拉法纳的身份证

为了进行测试,我启动了Grafana docker,将用户映射到root和目录/home/Grafana,如下所示:

[rastreamento@VMINDUS ~]$ sudo docker run --user 0:0 -p 3000:3000 --volume /home/rastreamento/grafana:/home/grafana/ d0454da13c84
在容器外壳中,我检查了运行实例的id,并尝试列出/home/grafana目录中的文件

grafana@2263170898d0:/var/lib$ [rastreamento@VMINDUS ~]$ docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED    STATUS              PORTS                    NAMES 
345145c9a591        d0454da13c84        "/run.sh"           7 seconds ago       Up 4 seconds        0.0.0.0:3000->3000/tcp   heuristic_wescoff 
[rastreamento@VMINDUS ~]$ docker exec -it 345145c9a591 /bin/bash
root@345145c9a591:/usr/share/grafana# cd /home/grafana/ 
root@345145c9a591:/home/grafana# ls 
ls: cannot open directory '.': Permission denied 
root@345145c9a591:/home/grafana# id 
uid=0(root) gid=0(root) groups=0(root)
如您所见,用户和组ID似乎已经按照容器启动时的预期进行了更改,但即使如此,我也无法访问主机映射目录


仍然没有线索说明为什么它可以在Ubuntu上运行,但在CentOs上却不行。我从未使用过CentOs,是否有其他配置使应用程序能够访问主机资源?一些安全配置?我真的很难处理它。

正如Avi Farada在年分配的那样,添加卷绑定解决了我的问题

:z-将使用标签“svirt\u sandbox\u file\t”向所有容器添加权限 :Z-将仅向当前容器标签添加权限

只需添加到docker run“:z”,如下所示:

docker run -v ./api:/usr/src/app:Z
或者在我的例子中,在docker composer中:

volumes:
   - ./api:/usr/src/app:Z
更多信息请查看docker

Jan Garaj提出了另一个聪明的建议,我在两台机器之间的不同行为可能是由于版本不匹配。我使用CentOS软件包管理器安装docker,而另一方面,我在Ubuntu上从官方的repo下载了最新版本

[编辑]

我使用了CentOS回购包中的Docker。那完全过时了

在Docker官方安装指南上,他们做的第一件事就是卸载机器上的stock Docker,以防你做了和我一样愚蠢的事情

只需按照以下说明安装Docker:


请提供您的
docker信息
以及容器中的文件系统权限和用户ID。我已经做了一些测试,但仍然不起作用。一点线索也没有。在文本上添加了一些编辑。您使用的是3年前的Docker版本+自定义sec comp配置文件
/etc/Docker/seccomp.json
。这两者都可能是根本原因。只需在卷后面添加一个卷绑定,并使用“:z”即可解决此问题。感谢您提供的信息,我将从原始回购协议更新docker,而不是使用CentOS的软件包管理器。这可能是两台机器行为不同的问题。
grafana@2263170898d0:/var/lib$ [rastreamento@VMINDUS ~]$ docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED    STATUS              PORTS                    NAMES 
345145c9a591        d0454da13c84        "/run.sh"           7 seconds ago       Up 4 seconds        0.0.0.0:3000->3000/tcp   heuristic_wescoff 
[rastreamento@VMINDUS ~]$ docker exec -it 345145c9a591 /bin/bash
root@345145c9a591:/usr/share/grafana# cd /home/grafana/ 
root@345145c9a591:/home/grafana# ls 
ls: cannot open directory '.': Permission denied 
root@345145c9a591:/home/grafana# id 
uid=0(root) gid=0(root) groups=0(root)
docker run -v ./api:/usr/src/app:Z
volumes:
   - ./api:/usr/src/app:Z