尝试编辑 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
我正在开发一个包含 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