wordpress - 反向代理到 WordPress 容器

标签 wordpress nginx docker docker-compose

我正在尝试创建一个 WordPress通过 Docker 容器。但我有 NGINX , MySQLLet's Encrypt安装在 host等级。

所以,我的 Docker Compose 文件是:

wordpress:
  image: wordpress:latest
  restart: always
  net: "host"
  environment:
      WORDPRESS_DB_HOST: 172.17.0.1:3306
      WORDPRESS_DB_NAME: DB_NAME
      WORDPRESS_DB_USER: DB_USER
      WORDPRESS_DB_PASSWORD: DB_PASSWORD
  ports:
      - "8080:8080"
  volumes:
      - /home/ubuntu/wordpress:/var/www/html

我的 NGINX 配置是:
server {
    listen                                      80 443 ssl http2;

    server_name                                 domain.com www.domain.com;

    # some headers

    ssl                                         on;
    # some ssl settings

    gzip                                        on;
    # some gzip settings

    # pagespeed and let's encrypt locations

    location / {
        if ($scheme = http) {
            return 301                          https://$server_name$request_uri;
        }

        # proxy pass headers

        proxy_pass                              http://172.17.0.1:8080;
    }
}

最后,我的ifconfig输出是:
docker0   Link encap:Ethernet  HWaddr 02:24:ad:a2:e8:dd  
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::24:adff:fea2:e8dd/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:324 errors:0 dropped:0 overruns:0 frame:0
          TX packets:334 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:20589 (20.5 KB)  TX bytes:10261280 (10.2 MB)

但是当我打开 domain.com ,我被重定向到 https://domain.com502 Bad Gateway .

来自 docker-compose logs 的最终输出:
Attaching to ubuntu_wordpress_1
wordpress_1  | (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
wordpress_1  | (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
wordpress_1  | no listening sockets available, shutting down
wordpress_1  | AH00015: Unable to open logs

所以,我想做的是通过 Docker 将 WordPress 容器化,并且每当有对 80 端口的请求时,将其重定向到 Docker 容器。

限制:
  • 我不想 Dockerize MySQL,这是最终的。
  • 我不想 Dockerize NGINX,因为我个人喜欢使用 http2 从源代码构建它和 pagespeed模块。
  • 最佳答案

    我想问题出在网络配置上。您的容器为 wordpress 使用端口 80,而您的主机为 nginx 使用相同的端口。当您使用 net: "host"( https://docs.docker.com/engine/reference/run/#/network-settings ) 时,您的容器使用主机的网络堆栈,并且它们在尝试绑定(bind)到同一端口时发生冲突。

    如果您的 mysql 服务器可远程访问,只需删除 net:"host"部分并将 mysql 主机配置替换为您将如何远程连接到它。它应该可以工作。

    如果由于任何原因无法打开您的 mysql 到远程连接,那么我想您应该创建所谓的用户定义网络。它也可以通过 docker-compose.yml 文件进行配置。 (https://docs.docker.com/compose/networking/#specifying-custom-networks)

    关于wordpress - 反向代理到 WordPress 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41059116/

    相关文章:

    CSS 倾斜的子菜单项显示不正确

    amazon-web-services - 任务中的基本容器已退出

    python - 如何使用 Gitlab CI 提高基于 python 的无服务器框架项目的部署速度

    php - 在自己的插件中为 Wordpress Media Uploader 自定义上传目录

    css - 添加自定义字段来控制菜单类

    php - 如何阻止 Woocommerce 添加到购物车重定向到产品页面

    python - Locust 负载测试给了我 ChunkedEncodingError

    ssl - 这个设置会起作用吗?

    apache - Varnish、Nginx、SSL - IP 检测问题

    docker - 如何覆盖/发现基本图像的 CMD/ENTRYPOINT