2016-04-20 41 views
1

我試圖創建一個由php:5.6-apache映像,一個mysql映像和一個包含將位於在/ var/www/html等/。卷裝有十月CMS。Docker php:5.6-Apache開發環境缺少卷掛載權限

我需要碼頭用戶對卷裝載權限,但我不希望它是該卷的所有者,所以我可以在容器外輕鬆修改它,並立即查看我的修改。

我的搬運工文件如下:

FROM php:5.6-apache 
MAINTAINER me <[email protected]> 

# Install modules 
RUN apt-get update 
RUN apt-get -f install -y 
RUN apt-get install -y wget 
RUN apt-get update && apt-get install -y \ 
    libmcrypt-dev \ 
    libfreetype6-dev \ 
    libjpeg62-turbo-dev \ 
    libmcrypt-dev \ 
    libpng12-dev \ 
    php-apc 
RUN docker-php-ext-install mbstring mysql mcrypt pdo pdo_mysql zip 
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 

RUN docker-php-ext-install gd 

WORKDIR /var/www/html/ 

VOLUME /var/www/html/ 

RUN a2enmod rewrite 

RUN usermod -a -G www-data root 

RUN php5enmod mcrypt && service apache2 restart 

我的碼頭工人,撰寫包含環境變量爲MySQL數據庫。

當我按原樣運行它時,我只得到500錯誤,但是如果我將卷的所有權更改爲www-data,那麼站點出現就好了。

我曾嘗試使用環境變量將Apache用戶和組更改爲根,但它沒有工作。

任何建議都不勝感激。

更新:我無法找到一個解決方案,以我正在尋找的確切方式解決問題,並最終實現了我認爲更像是黑客攻擊的事情。我添加下列行到dockerfile:

RUN usermod -u 1000 www-data 
RUN groupmod -g 1000 www-data 

這些行改變用戶和組的搬運工內以匹配所有者,這樣,它的完全訪問。

請注意,雖然有些情況下您的系統無法識別您的用戶1000和組1000.如果這不起作用,請打開docker apache容器,並檢查卷的用戶ID和組的大小ID,然後相應地更改上面的行。

回答

1

您在安裝卷中共享的所有文件都需要具有相同的uid:在容器中運行CMD的用戶的guid所有權。我設法使用一些變通方法在我的日常工作,希望那些之一,你可以工作:在另一個位置,並在入口點CP他們在正確的道路

  • COPY資源文件,因爲用戶是執行入口點腳本是運行CMD的同一個腳本,你的文件將具有相同的uid:guid。您可以在public jenkins docker image
  • 模仿看到這種模式的用戶和組所有權架構在泊塢窗主機所需的文件,以這種方式既容器和主機具有相同的UID/GUID爲您要使用的文件因此,Web服務器在嘗試讀取這些文件時不會自行終止。
  • 使用像postgresql public docker image這樣的入口點腳本隨時更改所有權

希望它有幫助!

1

運行docker-machine start default後,您需要ssh到它,並運行以下爲上述工作充分:

sudo mkdir --parents /var/www/html [假設在/ var/www/html等是在你的VirtualBox的共享文件夾]

sudo mount -t vboxsf -o uid=1000,gid=1000 var/www/html /var/www/html [這是爲了確保下一部分工作的uid和gid是1000]