微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Docker 中配置 Caddy+PHP

如何解决在 Docker 中配置 Caddy+PHP

我正在尝试使用 Caddy 为 PHP 应用程序提供服务,所有这些应用程序都是 Docker 化的。这是我的 Caddyfile:

http://mydomain.test
root * /app/public
PHP_fastcgi localhost:9000
rewrite * /index.PHP?{query}&p={path}
file_server

我的 Dockerfile:

FROM PHP:7.0-fpm
copY --from=composer:2 /usr/bin/composer /usr/local/bin/
copY --from=caddy:2.3.0-alpine /usr/bin/caddy /usr/local/bin/
RUN apt-get update -y && apt-get install -y libpng-dev libpq-dev
RUN docker-PHP-ext-install gd
RUN docker-PHP-ext-install zip
RUN docker-PHP-ext-install pdo_MysqL
workdir /app
copY composer.* ./
RUN composer install
copY . ./
CMD ["caddy","run"]

和我的 docker-compose.yml:

version: "3"

services:
  app:
    build: .
    ports:
      - 8080:80

所有三个文件都在我的 PHP 项目的根目录中。但是,当我使用 docker-compose 启动它然后访问 mydomain.test 时,我得到一个 502 HTTP 状态代码。在 Docker 容器的标准输出中,我看到:

{
  "level": "error","ts": 1624230589.230253,"logger": "http.log.error","msg": "dialing backend: dial tcp 127.0.0.1:9000: connect: connection refused","request": {
    "remote_addr": "192.168.112.1:54528","proto": "HTTP/1.1","method": "GET","host": "mydomain.test:8080","uri": "/","headers": {
      "Upgrade-Insecure-Requests": [
        "1"
      ],"User-Agent": [
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/91.0.4472.114 Safari/537.36"
      ],"Accept": [
        "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
      ],"Accept-Encoding": [
        "gzip,deflate"
      ],"Accept-Language": [
        "en-GB,en;q=0.9,es;q=0.8,en-US;q=0.7"
      ],"Connection": [
        "keep-alive"
      ],"Cache-Control": [
        "max-age=0"
      ]
    }
  },"duration": 0.000814111,"status": 502,"err_id": "rm3277ykx","err_trace": "reverseproxy.statusError (reverseproxy.go:783)"
}

所以从消息看来,Caddy 在连接到 PHP-fpm 时遇到了问题。但是它们都在同一个容器中运行,所以我不明白为什么它不能在 localhost:9000 上访问?

解决方法

您的 php-fpm 尚未运行,这是因为您正在尝试在同一个 Dockerfile 中启动 caddy。您需要在 docker-compose 文件中拆分 caddy 和 php-fpm。我让它在以下配置下工作。

球童档案:

example.com {
    root * /app/public
    php_fastcgi php-fpm:9000
    file_server
}

docker-compose.yml:

version: '3.3'
services:
  caddy:
    container_name: caddy
    image: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - $PWD/Caddyfile:/etc/caddy/Caddyfile
      - /home/websites:/app/public
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - php-fpm
  php-fpm:
    container_name: php-fpm
    build: .
    restart: unless-stopped
    volumes:
      - /home/websites:/app/public

volumes:
  caddy_data:
  caddy_config:

networks:
  default:
    external:
      name: main

Dockerfile:

FROM php:7.0-fpm

RUN apt-get update -y
RUN docker-php-ext-install pdo_mysql

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?