Php 如何在容器docker中反映主机权限?

Php 如何在容器docker中反映主机权限?,php,docker,nginx,Php,Docker,Nginx,我知道不可能更改通过卷共享的文件的权限,因为默认情况下,据我所知,docker容器的权限反映了主机的权限,但是,在我的情况下不会发生这种情况,docker只是将所有文件的权限更改为755,并且某些文件必须具有特定权限 主持人: 码头集装箱: Docker文件: FROM ubuntu:18.04 ARG DEBIAN_FRONTEND=noninteractive #Updating operating system RUN apt-get update && apt-g

我知道不可能更改通过卷共享的文件的权限,因为默认情况下,据我所知,docker容器的权限反映了主机的权限,但是,在我的情况下不会发生这种情况,docker只是将所有文件的权限更改为755,并且某些文件必须具有特定权限

主持人:

码头集装箱:

Docker文件:

FROM ubuntu:18.04

ARG DEBIAN_FRONTEND=noninteractive

#Updating operating system
RUN apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade

##Installing essential packages
RUN apt-get -y install apt-utils software-properties-common curl bash-completion vim git supervisor


## Add Scripts
ADD ./start.sh /start.sh
EXPOSE  80
STOPSIGNAL SIGTERM
#CMD ["/start.sh"]
ENTRYPOINT echo $XDEBUG_CONFIG >> /etc/php/7.3/fpm/php.ini && service php7.3-fpm start && nginx -g "daemon off;"
docker-compose.yml

volumes:
  - ${DOCUMENT_ROOT-./www}:/usr/share/nginx/html
  - ${VHOSTS_DIR-./config/nginx/sites-enabled}:/etc/nginx/sites-enabled
  - ${PHP_INI-./config/php/php.ini}:/etc/php/7.3/fpm/conf.d/php.ini
  - ${LOG_DIR-./logs/nginx}:/var/log/nginx
你的假设

我知道不可能更改通过卷共享的文件的权限

仅部分正确,实际上有一组模式-
:ro
:rw
–您可以在通过docker compose装入卷时使用,如文档中所述:

标准模式为只读模式为
ro
,读写模式为
rw
(默认)

资料来源:

如果您的主机使用
selinux
,您也可以使用
:Z
:Z
模式

如果使用
selinux
,则可以添加
z
z
选项来修改装载到容器中的主机文件或目录的selinux标签。这会影响主机本身上的文件或目录,并可能产生Docker范围之外的后果

  • z
    选项表示绑定装载内容在多个容器之间共享
  • Z
    选项表示绑定装载内容是私有的和非共享的
使用这些选项时要格外小心。使用
Z
选项绑定装入系统目录,如
/home
/usr
,会导致主机无法运行,您可能需要手动重新标记主机文件

资料来源:

以下是一个示例,在我的主机上,以下是我的文件的权限:

~ # ls -la ro rw 
ro:
total 0
drwxr-xr-x  3 ben  staff   96 May 23 23:06 .
drwxr-xr-x  9 ben  staff  288 May 23 23:16 ..
-rw-r--r--  1 ben  staff    0 May 23 23:06 file

rw:
total 0
drwxr-xr-x  3 ben  staff   96 May 23 23:06 .
drwxr-xr-x  9 ben  staff  288 May 23 23:16 ..
-rwxr-xr-x  1 ben  staff    0 May 23 23:06 file
然后使用这个docker-compose.yml

volumes:
  - ${DOCUMENT_ROOT-./www}:/usr/share/nginx/html
  - ${VHOSTS_DIR-./config/nginx/sites-enabled}:/etc/nginx/sites-enabled
  - ${PHP_INI-./config/php/php.ini}:/etc/php/7.3/fpm/conf.d/php.ini
  - ${LOG_DIR-./logs/nginx}:/var/log/nginx
这是容器上的结果

~ # ls -la ro rw
ro:
total 4
drwxr-xr-x    3 root     root            96 May 23 21:06 .
drwx------    1 root     root          4096 May 23 21:17 ..
-rw-r--r--    1 root     root             0 May 23 21:06 file

rw:
total 4
drwxr-xr-x    3 root     root            96 May 23 21:06 .
drwx------    1 root     root          4096 May 23 21:17 ..
-rwxr-xr-x    1 root     root             0 May 23 21:06 file

你能把这个简化成一个简单的问题吗?例如,Dockerfile包含很多PHP设置,但没有专门处理文件所有权或权限的内容。我不清楚你想做什么改变,或者你看到了什么行为。冠军,这正是问题的关键,让Docker尊重我主人的许可,而不是把一切都改成755