尝试编辑 docker 个容器文件时权限被拒绝

Permission denied when attempting to edit docker container files

我正在开发一个包含 Adminer 容器的 Dockerized 项目。我需要增加 post_max_size/usr/local/etc/php/conf.d/0-upload_large_dumps.ini.[= 中的值13=]

我的问题是任何编辑文件的尝试都会导致 权限被拒绝 响应。通常,这将是使用 sudo 解决的问题,但我也被拒绝了权限。

以下是我尝试编辑的目录的输出,显示目标文件归 root 所有:

/var/www/html $ cd /usr/local/etc/php/conf.d/
/usr/local/etc/php/conf.d $ ls -l
total 24
-rw-r--r--    1 root     root           113 Nov 18 22:10 0-upload_large_dumps.ini
-rw-r--r--    1 root     root            23 Nov 18 22:11 docker-php-ext-pdo_dblib.ini
-rw-r--r--    1 root     root            23 Nov 18 22:10 docker-php-ext-pdo_mysql.ini
-rw-r--r--    1 root     root            22 Nov 18 22:11 docker-php-ext-pdo_odbc.ini
-rw-r--r--    1 root     root            23 Nov 18 22:11 docker-php-ext-pdo_pgsql.ini
-rw-r--r--    1 root     root            17 Nov 18 17:03 docker-php-ext-sodium.ini

docker-compose 的管理员部分如下:

  adminer:
    image: adminer
    restart: always
    labels:
      - traefik.port=8080
      - traefik.frontend.rule=Host:adminer

如何编辑 docker-compose 以便我有权更新文件?

您的docker-compose.yaml没有什么可改变的。
如果你想改变它,你可以在容器中作为root用户exec

所以我想,现在,你正在做

docker compose exec adminer ash

然后,您正在尝试编辑这些文件。

你可以做的是:

docker compose exec --user root adminer ash

因此您将能够调整 root 拥有的那些文件。


这就是说,请注意 Docker 的哲学是容器应该是短暂的,所以你最好拥有自己的 Dockerfile 永久编辑该配置文件。另一种方法是在现有文件上安装文件以更改配置。

Docker文件中的改编示例:

FROM adminer 

COPY ./0-upload_large_dumps.ini \
     /usr/local/etc/php/conf.d/0-upload_large_dumps.ini
## ^-- copies a files from the folder where you build
## in order to override the existing configuration

然后在你的 docker-compose.yml:

  adminer:
    build: .
    image: your-own-namespace/adminer
    restart: always
    labels:
      - traefik.port=8080
      - traefik.frontend.rule=Host:adminer

挂载文件覆盖配置文件示例:

  adminer:
    image: adminer
    restart: always
    labels:
      - traefik.port=8080
      - traefik.frontend.rule=Host:adminer
    volumes:
      - "./0-upload_large_dumps.ini:\
        /usr/local/etc/php/conf.d/0-upload_large_dumps.ini"
## a local file `0-upload_large_dumps.ini` on your host
## will override the container ini file