docker-compose、caddy 和 php-fpm 的基本配置

tgi*_*rod 2 php docker-compose caddy

我正在尝试在 docker-compose 上使用 caddy 和 php-fpm 构建基本配置。问题是,当我尝试访问我的index.php文件时,收到“404 文件未找到”消息。这是我的配置。

docker-compose.yml

version: "3.8"

services:
  caddy:
    image: caddy:alpine
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - $PWD/Caddyfile:/etc/caddy/Caddyfile
      - $PWD/www:/srv/www
      - $PWD/caddy/data:/data
      - $PWD/caddy/config:/config
      - $PWD/caddy/log:/var/log
    depends_on:
      - app
  app:
    image: php:fpm-alpine
    ports:
      - "9000:9000"
    volumes:
      - "$PWD/www:/var/www/html"
Run Code Online (Sandbox Code Playgroud)

球童文件

localhost:80 {
    root * /srv/www
    php_fastcgi app:9000
    file_server
}
Run Code Online (Sandbox Code Playgroud)

最后我有一个www包含 - http://localhost/test.html 的文件夹index.phptest.html但 http://localhost/index.php 给了我一个 404。

我究竟做错了什么?

编辑:这是我尝试过的:

  • 我检查了一下是否可以从一个容器 ping 到另一个容器
  • 端口 9000 在 php 容器上有效打开

看起来 php 文件没有安装在 php 容器内的正确位置,而是/var/www/html安装在工作目录中。

我不知道接下来该去哪里解决这个问题。

tgi*_*rod 7

终于,我找到了答案!

php-fpm 需要文件的绝对路径,因此您必须在两个容器中具有相同的路径,或者root在 php_fastcgi 块内添加指令。

localhost:80 {
    root * /srv/www
    encode gzip
    php_fastcgi php:9000 {
        root /var/www/html
    }
    file_server
    log
}
Run Code Online (Sandbox Code Playgroud)