【发布时间】:2021-02-22 16:51:06
【问题描述】:
我正在尝试通过 Docker 在本地环境中运行 Laravel 应用程序。我想为每个服务(即 Apache、PHP、MySQL)设置单独的容器。我还想将 Composer、Artisan 和 PHPUnit 保存在单独的容器中。这比其他任何东西都更整洁。
所有容器都可以正常启动,我可以通过“docker-compose exec [container name] /bin/sh”命令访问每个容器。
我遇到的问题是公用文件夹中的 index.php 没有正确执行。 Apache 只是提供文件内容。
我不知道我做错了什么。我试过使用 Nginx 容器而不是 Apache,但我遇到了同样的问题。我猜我的 Apache 容器无法识别我的 PHP 容器。
下面有什么我做错了吗?
我的 docker-compose.yml 文件如下:
version: '3.8'
networks:
cpw:
name: cpw_network
services:
apache:
build:
context: .
dockerfile: apache.dockerfile
container_name: cpw_apache
depends_on:
- php
- mysql
ports:
- 8080:80
- 8443:443
volumes:
- ./:/var/www/html
networks:
- cpw
php:
build:
context: .
dockerfile: php.dockerfile
container_name: cpw_php
volumes:
- ./:/var/www/html
networks:
- cpw
mysql:
image: mysql:5.7.32
container_name: cpw_mysql
environment:
MYSQL_DATABASE: cpw
MYSQL_USER: laravel
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: secret
networks:
- cpw
composer:
image: composer:latest
container_name: cpw_composer
volumes:
- ./:/var/www/html
working_dir: /var/www/html
networks:
- cpw
artisan:
build:
context: .
dockerfile: php.dockerfile
container_name: cpw_artisan
volumes:
- ./:/var/www/html
working_dir: /var/www/html
entrypoint: [ "php", "artisan" ]
networks:
- cpw
phpunit:
build:
context: .
dockerfile: php.dockerfile
container_name: cpw_phpunit
volumes:
- ./:/var/www/html
working_dir: /var/www/html
entrypoint: [ "/var/www/html/vendor/bin/phpunit" ]
networks:
- cpw
我的apache.docker文件如下:
FROM httpd:alpine
ADD ./apache/httpd-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf
RUN sed -i 's,#Include conf/extra/httpd-vhosts.conf,Include conf/extra/httpd-vhosts.conf,g' /usr/local/apache2/conf/httpd.conf
RUN mkdir -p /var/www/html
我的php.docker文件如下:
FROM php:7.4.12-fpm-alpine
RUN mkdir -p /var/www/html
RUN apk --no-cache add shadow && usermod -u 1000 www-data
RUN docker-php-ext-install pdo pdo_mysql
我的httpd-vhosts.conf如下:
<VirtualHost *:80>
ServerAdmin email@email.com
DocumentRoot /var/www/html/public
ServerName localhost
ServerAlias localhost
ErrorLog logs/localhost-error_log
CustomLog logs/localhost-access_log common
<Directory /var/www/html/public>
AllowOverride All
DirectoryIndex index.php index.php
Options -Indexes
Require all granted
</Directory>
</VirtualHost>
任何帮助表示赞赏。
问候, 斯蒂芬
【问题讨论】:
-
您尝试过什么调试问题?我没有看到任何配置告诉 Apache 将 PHP 容器用于任何事情
-
@NicoHaase,我尝试使用 Nginx 容器而不是 Apache。
-
那么指示服务器使用 PHP 的 Apache 配置在哪里?
-
只是出于好奇,这个问题和the one you posted earlier that got closed and you decided to delete 之间的确切区别是什么?如果你决定故意不遵守规则,你至少可以修改你的问题,向我们展示你已经取得了一些进展。