我正在使用docker通过php服务大型网站。问题是,当我将主机卷链接到容器时,出现权限错误。我知道我可以运行chmod -R 777 /var/www
,但这有点危险吗?
我的Dockerfile
FROM php:7.0.3-apache
RUN docker-php-ext-install mysqli
RUN a2enmod rewrite
RUN a2enmod headers
RUN docker-php-ext-install pdo_mysql
RUN apt-get update -y && apt-get install -y sendmail libpng-dev
RUN apt-get update && \
apt-get install -y \
zlib1g-dev
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd
RUN docker-php-ext-install mbstring
RUN docker-php-ext-install zip
RUN docker-php-ext-install gd
我的Docker-Compose.yml
version: "2"
services:
www:
build: .
ports:
- "80:80"
volumes:
- ./test.com:/var/www/
links:
- db
networks:
- default
db:
image: mysql:5.7
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
- ./mysql:/var/lib/mysql
networks:
- default
有什么想法如何处理主机卷权限?
答案 0 :(得分:0)
正如您已经怀疑的那样,chmod
和777
绝对不是一个好主意。您将需要使用以下命令将文件夹和文件整理到apache组:chown -R <current_user>:www-data /test.com
,并将权限更改为755
。
希望对您有帮助
答案 1 :(得分:0)
您可以设置docker容器用户的uid与主机用户的uid相等。应该会有帮助。
答案 2 :(得分:0)
我花了一些时间寻找这种情况的最佳解决方案。 我发现的最干净的方法是在主机上为用户33设置权限。
我尝试过的选项:
在Docker composer文件中定义其他用户ID :可能多次运行,但是在Apache尝试使用内部文件(例如ssh密钥)时可能会导致错误
将本地UID作为env变量传递并将www-data添加到相同的组/ id :您必须在构建过程中将其作为Docker文件说明的一部分进行,因此当您创建具有主机权限的映像时,它还会创建另一个粗略方案。
我发现的比较简单的方法是向用户33授予对本地文件的权限。请注意,您不必创建用户。
setfacl -R -m u:33:rwx / path / to / your / files