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

时间:2020-05-23 17:17:34

标签: php docker nginx

我知道无法更改通过卷共享的文件的权限,因为默认情况下,并且据我了解,docker容器的权限反映了主机的权限,但是,这是对于我而言,这没有发生,泊坞窗只是将所有文件的权限更改为755,并且某些文件必须具有特定的权限。

主机:

enter image description here

Docker容器:

enter image description here

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

1 个答案:

答案 0 :(得分:1)

您的假设

我知道无法更改通过卷共享的文件的权限

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

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

来源:https://docs.docker.com/compose/compose-file/#short-syntax-3

如果主机使用:Z,则还可以使用:zselinux模式。

如果使用selinux,则可以添加zZ选项,以修改要装入容器的主机文件或目录的selinux标签。这会影响主机本身上的文件或目录,并可能导致超出Docker范围的后果。

  • z选项指示绑定安装内容在多个容器之间共享。
  • Z选项指示绑定装入内容是私有的且未共享。

对于这些选项,请极端谨慎使用。使用/home选项绑定安装系统目录,例如/usrZ会使主机无法操作,并且您可能需要手动重新标记主机文件。

来源:https://docs.docker.com/storage/bind-mounts/#configure-the-selinux-label

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

~ # 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

version: '3.8'

services:
  test:
    image: alpine
    volumes:
      - ./ro:/root/ro:Z
      - ./rw:/root/rw:Z
    command: sleep 100000000000

这是容器上的结果

~ # 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