簡體   English   中英

docker apache 卷無法正常工作

[英]docker apache volume not working properly

version: "3.8"

networks:
  frontend:
  backend:
services:
  apache:
    container_name: apache
    build: ./docker/apache/
    ports:
      - "8001:80"
    volumes:
      - ./src:/usr/local/apache2/htdocs
    networks:
      - frontend
      - backend
  php:
    container_name: php
    build: ./docker/php
    ports:
      - "9001:9000"
    volumes:
      - ./src:/usr/local/apache2/htdocs
    working_dir: /usr/local/apache2/htdocs
    networks:
      - backend

apache.conf

LoadModule deflate_module /usr/local/apache2/modules/mod_deflate.so
LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so
LoadModule proxy_fcgi_module /usr/local/apache2/modules/mod_proxy_fcgi.so

<VirtualHost *:80>
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/usr/local/apache2/htdocs/$1

    DocumentRoot /usr/local/apache2/htdocs

    <Directory /usr/local/apache2/htdocs/public>
        Options -Indexes +FollowSymLinks
        DirectoryIndex index.php
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

在此處輸入圖像描述 如您所見,項目文件夾目錄。 當嘗試訪問 http://localhost:8002/ 時,它不會在瀏覽器索引中顯示公用文件夾。

在此處輸入圖像描述

找不到更改 apache.conf 文件中的目錄路徑時。 瀏覽器上顯示錯誤消息

<Directory /usr/local/apache2/htdocs/public>

PHP Docker 文件

FROM php:8.1-fpm

COPY php.ini /usr/local/etc/php/conf.d/php.ini

RUN apt-get update \
  && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev \
  && docker-php-ext-install pdo 

阿帕奇 Dockerfile

FROM httpd:2.4.51
COPY apache.conf /usr/local/apache2/conf/apache.conf

RUN echo "Include /usr/local/apache2/conf/apache.conf" \
    >> /usr/local/apache2/conf/httpd.conf

由於所有其他文件都顯示出來,因此很可能是權限問題。 您的public目錄可能由主機系統上的apachehttpwww-data用戶擁有,並且該用戶的uid和/或gid與容器內使用的內容不匹配。 您可以像這樣找出主機用戶的ID...

首先,確定正確的用戶名:

ls -l ./src/public

然后獲取該用戶的uid

id -u www-data

gid

id -g www-data

最后,將以下行附加到您的 apache Dockerfile中,將ARG值替換為上述命令的結果:

ARG UID=33
ARG GID=33
RUN usermod -u ${UID} www-data \
&& usermod -g ${GID} www-data \
&& chown -hR www-data:www-data /usr/local/apache2

您使用的官方httpd映像以用戶www-data身份運行,因此不要在usermod命令中更改它,我們只是更改容器中現有用戶的 ID 以匹配您的主機系統。

為了使這更靈活/便攜,您還可以從您的撰寫文件中傳遞值

或者

為了快速而骯臟的修復,只需在主機上執行chmod -R a+r ./src/public 這可能會起作用,但不太安全。 但是,如果您只是在進行測試或僅設置此項目供個人使用,那么這可能是最簡單的解決方案。

對於測試,請在 docker docker run上嘗試使用完整路徑作為源的--mount語法

 --mount type=bind,source=/path/to/src,target=/usr/local/apache2/htdocs
                          ^^^^^^^^^^^^

它指定一個綁定掛載,這意味着主機上的文件或目錄被掛載到容器中。


還要docker inspect yourContainer的輸出,以查看已設置的卷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM