为什么Postgres容器更改文件夹的所有者(docker-compose)

时间:2020-02-27 11:44:37

标签: postgresql docker docker-compose

我的docker-compose.yml是

  database:
    container_name: k4fntr_database
    build: ./docker/postgres
    restart: always
    environment:
      ENV: ${APP_ENV}
      TESTING_DB: ${DB_DATABASE_TESTING}
      POSTGRES_DB: ${DB_DATABASE}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    ports:
      - "15432:5432"
    volumes:
    - ./docker/postgres/pg-data:/var/lib/postgresql/data
    networks:
      - backend-network

我的Dockerfile是

FROM postgres:10.5-alpine

COPY /docker-entrypoint-initdb.d/ /docker-entrypoint-initdb.d/

RUN chmod 0755 -R /docker-entrypoint-initdb.d/

我跑步时遇到问题

docker-compose up -d --build

使用用户“ 70”和组“ root”的错误权限创建了一个名为pg-data的文件夹

enter image description here

此权限不允许我执行任何操作,例如查看文件夹内部。另外,当我尝试用

重建容器时

docker-compose up -d --build

我遇到错误

PermissionError:[Errno 13]权限被拒绝: '/ home / ubuntu / PhpstormProjects / fntr / docker / postgres / pg-data'[5262] 无法执行脚本docker-compose

我以ubuntu:ubuntu用户身份运行docker-compose。

在运行之前创建文件夹时,情况有所改变

docker-compose up -d --build

在这种情况下,文件夹的组为“ ubuntu”,但所有者仍为“ 70”

enter image description here

但没有任何效果,所有问题都存在

1 个答案:

答案 0 :(得分:0)

Postgres在启动容器时运行入口点文件。

https://github.com/docker-library/postgres/blob/master/10/docker-entrypoint.sh#L36

此功能可更改docker容器内目录的权限。由于此目录也安装在主机文件系统上,因此权限反映在该文件系统上。

在系统上,检查当前映射到uid-999的用户。您可以从那里获得线索。避免在此处发布/ etc / passwd或/ etc / shadow文件

您需要在docker-compose中传递用户

请参见https://hub.docker.com/_/postgres->任意-用户说明