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'
php/Dockerfile
FROM php:7.0-apache
MAINTAINER Webgriffe Srl <support@webgriffe.com>
RUN docker-php-ext-install mysqli && a2enmod rewrite
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>
我输入了下一个命令 docker-compose构建 docker-compose up -d
我得到那个输出 创建docker-local2_mysql_1 ...完成 创建docker-local2_php_1 ...完成 创建docker-local2_phpmyadmin_1 ...完成 创建docker-local2_apache_1 ...完成
Farther I write this
docker exec -it docker-local2_php_1 sh
# php -m
But I didn't see mod_rewrite module
[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]
我的.htaccess文件不起作用 我哪里做错了?而我需要做些什么来解决这个问题?
答案 0 :(得分:2)
如评论中所述,mod_rewrite
不是PHP模块,而是apache模块。您已经在以下位置的php / Dockerfile中启用了它:
a2enmod rewrite
不需要其他软件包安装。
通过运行apachectl -M
列出所有已启用的模块来验证该模块已启用,您应该看到类似以下内容的
...
rewrite_module (shared)
...
关于您的docker compose文件,看来您使用的是两个单独的容器来运行Web服务,实际上您实际上只需要一个(除非您使用第二个apache容器将对PHP的请求反向代理) -apache容器)。在简单的情况下,已经将PHP和apache预先配置为可以在php:<version>-apache
映像中一起工作(例如,预先安装了mod_php),而您只需要复制demo.apache.conf
作为php构建的一部分,即可例如:
version: "3.7"
services:
php:
build: './php/'
volumes:
- ./public_html/www/:/var/www/html/
- ./apache/demo.apache.conf:/etc/apache2/sites-enabled/demo.conf
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'
最后一点,请避免使用links
关键字they are deprecated。 Docker compose默认情况下会为您创建一个网络,所有容器都可以使用服务名作为主机名相互解析。
答案 1 :(得分:0)
对我没有帮助 像这样的命令 $ httpd -M $ apachectl -M 他们返回了错误 我进入模块文件夹中,有模块mod_rewrite 但是我仍然不知道如何在Docker容器中运行此模块!