在 Docker 中,可以通过多种方式让两个容器(例如 Nginx 和 PHP)互相连接。最常见的方式是使用 Docker 网络来实现容器间的通信。
以下是一个基本的示例,展示了如何让 Nginx 和 PHP 容器互连:
1. 创建一个自定义 Docker 网络
首先,创建一个自定义网络,这样可以让容器之间通过容器名互相通信:
bash
docker network create my_network
2. 创建 PHP 容器
使用 php:7.4-fpm(或其他版本的 PHP)镜像创建一个 PHP 容器。你可以通过 docker run 命令来启动容器,并将其连接到我们刚刚创建的网络中。
bash
docker run -d --name php-fpm --network my_network php:7.4-fpm
这将启动一个 PHP 容器并将其连接到 my_network 网络。
3. 创建 Nginx 容器
同样,使用 nginx 镜像创建一个 Nginx 容器,并将其连接到相同的网络:
bash
docker run -d --name nginx --network my_network -p 80:80 nginx
这会启动一个 Nginx 容器,并将其暴露到主机的 80 端口。它也连接到 my_network 网络。
4. 配置 Nginx 代理到 PHP 容器
为了让 Nginx 正确地代理到 PHP 容器,首先需要配置 Nginx 的配置文件 nginx.conf。在 Nginx 配置中,你需要指定 PHP-FPM 容器的名称和端口(通常是 9000)。
创建一个 nginx.conf 文件,内容如下:
nginx
server {
listen 80;
server_name localhost;
location / {
fastcgi_pass php-fpm:9000; # PHP 容器的名称(php-fpm)和 PHP-FPM 监听的端口(9000)
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}
你可以将这个配置文件挂载到 Nginx 容器中。首先,将配置文件放到本地某个目录,比如 ./nginx.conf。
然后,通过以下命令重新启动 Nginx 容器并挂载配置文件:
bash
docker run -d --name nginx --network my_network -p 80:80 -v ./nginx.conf:/etc/nginx/nginx.conf nginx
这会使 Nginx 使用你自定义的配置文件。
5. 将 PHP 文件放入共享目录
为了让 Nginx 可以访问到 PHP 文件,你可以使用 Docker 的卷(Volumes)将 PHP 文件目录共享给两个容器。
首先,创建一个共享目录,比如 ./html,并放入一个简单的 PHP 文件(如 index.php):
php
<?php
echo "Hello from PHP!";
然后,重新启动 PHP 和 Nginx 容器,将共享目录挂载到容器中:
bash
docker run -d --name php-fpm --network my_network -v ./html:/var/www/html php:7.4-fpm
docker run -d --name nginx --network my_network -v ./nginx.conf:/etc/nginx/nginx.conf -v ./html:/var/www/html -p 80:80 nginx
这样,Nginx 和 PHP 容器就能够共享 ./html 目录中的 PHP 文件,并且 Nginx 会将请求转发到 PHP 容器。
6. 测试
打开浏览器,访问主机的 IP 或 localhost,你应该看到 Hello from PHP! 的输出,证明 Nginx 成功地代理请求到 PHP 容器。
总结
创建一个 Docker 网络(my_network)。
启动 PHP 容器并将其连接到网络。
启动 Nginx 容器并将其连接到相同的网络。
配置 Nginx 代理到 PHP 容器。
使用共享卷将 PHP 文件提供给两个容器。
这样,你就完成了 Nginx 和 PHP 容器之间的互联配置。