wordpress - Varnish 和 wordpress 之间的 Docker 链接不起作用

标签 wordpress docker docker-compose varnish

这是我的 docker-compose 文件:

version: '2'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_PASSWORD: wordpress

   varnish:
     image: eeacms/varnish
     depends_on:
       - wordpress
     ports:
       - 9000:6081
     environment:
       DNS_ENABLED: "true"
       BACKENDS: wordpress
       BACKENDS_PORT: 80
volumes:
    db_data:

WordPress 正在运行 0.0.0.0:8080172.17.0.1:8080
但是 /etc/hosts Varnish 容器是这样的
root@4cc3dc214d69:/# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3  wordpress fd3f01c29d6a dockoor_wordpress_1
172.17.0.3  wordpress_1 fd3f01c29d6a dockoor_wordpress_1
172.17.0.3  dockoor_wordpress_1 fd3f01c29d6a
172.17.0.4  4cc3dc214d69

varnish 正在映射 WordPress 172.17.0.3
这就是为什么在尝试访问 0.0.0.0:8000 时我明白了
Error 503 Backend fetch failed

Backend fetch failed
Guru Meditation:

XID: 3

Varnish cache server

有人可以指出我的撰写文件有什么问题吗?

PS docker-compose 日志显示 Varnish 确实命中了 worpress,但它得到了 302 响应。
02 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:19 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:20 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:21 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:22 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:23 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:24 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:25 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:26 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:27 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:29 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:30 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:31 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:32 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:33 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:34 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:35 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:36 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:37 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:38 +0000] "GET / HTTP/1.1" 302 338 "-" "-"
wordpress_1     | 172.17.0.4 - - [25/Mar/2017:10:45:39 +0000] "G

最佳答案

您的链接似乎按预期工作。 0.0.0.0 不是您连接的 IP 地址,它是一个监听器 IP,它告诉网络堆栈监听所有接口(interface)而不是主机上的特定 IP。在您的情况下,所有 IP 都包括 127.0.0.1(容器内的环回)和 172.17.0.3(该网络上其他容器可访问的 IP。

请注意,链接在很大程度上已被弃用,最好在网络上配置容器(默认网桥除外)并使用内置的 DNS 发现。同样,compose 版本 1 文件格式也在很大程度上被弃用,您应该考虑至少升级到版本 2 compose 文件格式。使用该格式,默认情况下将创建一个网络供您的容器进行通信。

以下是版本 2 格式的撰写文件示例:

version: '2'
services:
  wordpress:
    image: wordpress
    ports:
      - 8080:80

  mysql:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: examplepass

  varnish:
    image: eeacms/varnish
    ports:
    - "8000:6081"
    environment:
      DNS_ENABLED: "true"
      BACKENDS: "wordpress"
      BACKENDS_PORT: 8080

http 302 是一个重定向,无论您正在运行什么都能够看到 url 但没有遵循重定向或 wordpress 未配置为提供正确的重定向。

更新:您看到的 Varnish 错误是因为您正在使用 302 重定向响应的 wordpress 服务器上探测/。 Varnish 似乎需要一个 200 成功代码来检测它正在探测的 url。为此,您可以在 varnish 环境中添加如下变量:
BACKENDS_PROBE_URL: /wp-includes/js/jquery/jquery.js

关于wordpress - Varnish 和 wordpress 之间的 Docker 链接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43014491/

相关文章:

javascript - WordPress admin-ajax.php 加载失败

docker - 如何在 debian Jessie 上安装 docker-engine 1.13

docker - Docker 镜像会改变吗?如何确保他们不这样做?

windows - docker 错误 : Container command not found or does not exist when running from Win10

wordpress - 具有特定尺寸的 the_post_thumbnail

wordpress - 为自定义帖子类型设置默认分类术语

docker - WSL2 中的 Kubernetes 挂载文件夹

javascript - Gulp 构建任务在 docker 内失败

docker-compose run 不设置链接

php - Wordpress Accordion 菜单不会在点击时展开