docker apache 卷无法正常工作

Fre*_*man 6 php docker dockerfile docker-compose

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
Run Code Online (Sandbox Code Playgroud)

阿帕奇配置文件

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>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 正如您所看到的项目文件夹目录。当尝试访问 http://localhost:8002/ 时,它不会在浏览器索引中显示公共文件夹。

在此输入图像描述

当更改 apache.conf 中的目录路径时找不到文件。浏览器上显示错误消息

<Directory /usr/local/apache2/htdocs/public>
Run Code Online (Sandbox Code Playgroud)

PHP Dockerfile

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 
Run Code Online (Sandbox Code Playgroud)

Apache 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
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 0

为了进行测试,请尝试使用以下--mount语法,以完整路径作为源docker run

 --mount type=bind,source=/path/to/src,target=/usr/local/apache2/htdocs
                          ^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

它指定绑定挂载,这意味着主机上的文件或目录被挂载到容器中。


另请检查 的输出docker inspect yourContainer,以查看已设置的音量。