docker-compose.yml
version: "3.7"
services:
php:
build: './php/'
volumes:
- ./public_html/www/:/var/www/html/
apache:
build: './apache/'
depends_on:
- php
- mysql
ports:
- "8080:80"
volumes:
- ./public_html/www/:/var/www/html/
#- ./log:/var/log/apache2
mysql:
image: mysql:5.6.40
ports:
- "3306:3306"
environment:
- MYSQL_DATABASE=el-cigarette
- MYSQL_ROOT_PASSWORD=root
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3306
ports:
- '8081:80'
Run Code Online (Sandbox Code Playgroud)
php/Dockerfile
FROM php:7.0-apache
MAINTAINER Webgriffe Srl <support@webgriffe.com>
RUN docker-php-ext-install mysqli && a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)
apache/demo.apache.conf
ServerName localhost
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>
# Proxy .php requests to port 9000 of the php-fpm container
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1
DocumentRoot /var/www/html/
DirectoryIndex index.php
<Directory /var/www/html/>
Options All
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
# Send apache logs to stdout and stderr
CustomLog /var/www/1 common
ErrorLog /var/www/2
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我输入了下一个命令
docker-compose build
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
我得到那个输出
Creating docker-local2_mysql_1 ... done
Creating docker-local2_php_1 ... done
Creating docker-local2_phpmyadmin_1 ... done
Creating docker-local2_apache_1 ... done
Run Code Online (Sandbox Code Playgroud)
进一步我写这个
docker exec -it docker-local2_php_1 sh
# php -m
Run Code Online (Sandbox Code Playgroud)
但是我没有看到 mod_rewrite 模块
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib
[Zend Modules]
Run Code Online (Sandbox Code Playgroud)
我的 .htaccess 文件不起作用 我哪里出错了?我需要做什么来解决这个问题?
正如评论中提到的,mod_rewrite不是 PHP 模块,而是 apache 模块。您已经在 php/Dockerfile 中启用了它:
a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)
不需要额外的软件包安装。通过运行apachectl -M列出所有启用的模块来验证模块是否已启用,您应该看到如下内容:
...
rewrite_module (shared)
...
Run Code Online (Sandbox Code Playgroud)
关于您的 docker compose 文件,您似乎正在使用两个单独的容器来运行您的 Web 服务,而实际上您只需要一个(除非您使用第二个 apache 容器将请求反向代理到 PHP-apache 容器)。在简单的情况下,PHP 和 apache 已预先配置为在php:<version>-apache映像中协同工作(例如 mod_php 预安装),您只需将您的文件复制demo.apache.conf为 php 构建的一部分,例如:
a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)
最后提示,避免使用links关键字,它们已被弃用。默认情况下,Docker compose 将为您创建一个网络,其中所有容器都可以使用服务名称作为主机名相互解析。
| 归档时间: |
|
| 查看次数: |
5982 次 |
| 最近记录: |