我使用带有以下容器的多项目结构运行 laradock 7.0.0:
docker-compose up -d apache2
这将运行 php-fpm 和 apache2
我将主机文件配置为连接到本地主机:
/etc/hosts
127.0.0.1 myproject.local
我为我的 apache2 创建了一个站点配置:
laradock/apache2/sites/myproject.conf
<VirtualHost *:80>
ServerName myproject.local
DocumentRoot /var/www/myproject/public/
Options Indexes FollowSymLinks
<Directory "/var/www/myproject/public/">
AllowOverride All
<IfVersion < 2.4>
Allow from all
</IfVersion>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
</Directory>
</VirtualHost>
我修改 php.ini 设置以允许 url 包括:
laradock/php-fpm/laravel.ini
allow_url_include=On
访问 myproject.local 时,该网站正在显示。到目前为止没有问题。但是当我执行 file_get_contents 时,我得到一个连接被拒绝:
$json = file_get_contents('http://myproject.local/test.json');
var_dump($json);
exit;
回复:
Warning: file_get_contents(http://myproject.local/test.json): failed to open stream: Connection refused in /var/www/myproject/public/test.json
看来php-fpm 找不到apache2。当我得到 apache2 容器的 IP 地址时:
docker exec -ti laradock_apache2_1 bash
ifconfig
结果是:
eth0 Link encap:Ethernet HWaddr 02:42:ac:16:00:04
inet addr:172.22.0.4
我修改了我的 php-fpm 上的主机文件
docker exec -ti laradock_php-fpm_1 bash
nano /etc/hosts
添加规则:
172.22.0.4 myproject.local
比 file_get_contents 有效。这个修复的问题是 apache2 容器的 ip 并不总是相同的。对于每个项目,我每次都必须这样做。
有没有办法修改 Dockerfile 或 docker-compose.yml 以一次将每个项目的 php-fpm 链接到 apache2?