[英]docker volumes and apache permissions
我正在使用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
任何想法如何處理主機卷權限?
正如您所懷疑的那樣,使用777
chmod
絕對不是一個好主意。 您需要使用以下命令將文件夾和文件chown到apache組: chown -R <current_user>:www-data /test.com
並將權限更改為755
。
我希望這可以幫助你
您可以為docker容器設置uid,用戶與主機用戶的uid相同。 它應該有所幫助。
我花了一些時間尋找這種情況的最佳解決方案。 我發現最干凈的方法是在主機上為用戶33設置權限。
我試過的選項:
在Docker composer文件中定義不同的用戶ID :可能多次工作,但在Apache嘗試使用內部文件時可能會導致錯誤(例如ssh密鑰)
將本地UID作為env變量傳遞並將www-data添加到同一組/ id :您必須在構建過程中將其作為Docker文件指令的一部分執行此操作,因此當您使用權限創建圖像時,它還會創建另一個粗略方案從您的主機。
我找到的不那么混亂的方法是向用戶提供本地文件的權限33.注意,您不必創建用戶。
setfacl -R -mu:33:rwx / path / to / your / files
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.