使用jwilder / nginx-proxy的fpm错误:
TL; DR为什么这个WordPress的:最新的Dockerfile是可以与Nginx 的代理,但这一个不是WordPress的:FMP的Dockerfile ? 我怎样才能使用
nginx-proxy
wordpress:fpm
图像
嗨,
我成功地用一些wordpress容器来使用nginx-proxy。 例如这个docker-compose.yml
完美的工作:
db: image: mariadb environment: - MYSQL_ROOT_PASSWORD=password volumes: - /home/stack/my_domain/bdd:/var/lib/mysql wordpress: image: wordpress links: - db:mysql environment: - VIRTUAL_HOST=my_domain.fr,www.my_domain.fr - LETSENCRYPT_HOST=www.my_domain.fr - LETSENCRYPT_EMAIL=contact@my_domain.fr env_file: - ./env volumes: - /home/stack/my_domain/wordpress:/var/www/html
但如果我使用的wordpress:fpm
图像(而不是一个基于Apache的图像)我有502错误的网关错误,并在日志中的这条消息:
nginx.1 | 2017/08/14 21:29:51 [error] 347#347:* 2447 connect()失败(111:Connection refused),连接上游时,客户端:86.222.20.31,服务器:www.my_domain.fr,请求: “GET / contact / HTTP / 2.0”,上行:“ http://172.17.0.14:80/contact/ ”,主机:“www.my_domain.fr”,referrer:“ https://www.my_domain.fr/ “
和这个消息:
root @ 9408854fae4b:/etc/nginx/conf.d# nginx -s reload 2017/08/14 21:37:35 [emerg] 671#671:/ etc / nginx / conf中的“upstream”指令中的参数数目无效。 d / default.conf:53 nginx:[emerg]在/etc/nginx/conf.d/default.conf中的“upstream”指令中无效的参数个数:53
第53行的default.conf包含
upstream mydomain.fr { ## Can be connect with "bridge" network # my_domain_wordpress_1 server 172.17.0.14:9000; }
其他域有服务器172.17.0.xx:80;
所以我在docker-compose.yml文件中添加port:80
和/或expose:80
。 我设法获得
upstream mydomain.fr { ## Can be connect with "bridge" network # my_domain_wordpress_1 server 172.17.0.14:80; }
但与502错误相同。
任何想法为什么?
问候
原因是这两个图像在工作上是不同的。
wordpress:latest
在端口80上使用apache,并执行正确的PHP脚本来响应请求。 它处理HTTP协议。
另一方面, wordpress:fpm
使用PHP-FPM,这是一个快速的CGI服务器,它不只是期望proxy_pass
而是像下面的其他nginx参数
location ~ \.php$ { try_files $uri =404; fastcgi_pass http://fpm:9000; fastcgi_index index.php; include /etc/nginx/fastcgi_params; }
nginx-proxy
image只是用VIRTUAL_HOST
环境variables检查启动了哪些容器,检查其暴露的端口,然后创build一个代理通行证模板。 你需要的是一个不同的模板。 这可以使用每个主机configuration完成。
每VIRTUAL_HOST
要在每个VIRTUAL_HOST的基础上添加设置,请将您的configuration文件添加到/etc/nginx/vhost.d下。 与代理范围内的情况不同,它允许多个以.conf结尾的任何名字的configuration文件,每个VIRTUAL_HOST文件必须恰好在VIRTUAL_HOST之后命名。
为了允许在添加和删除后端时dynamicconfiguration虚拟主机,最好将外部目录挂载为/etc/nginx/vhost.d,而不是使用派生映像或挂载单个configuration文件。
例如,如果您有名为app.example.com的虚拟主机,则可以按如下方式为该主机提供自定义configuration:
$ docker run -d -p 80:80 -p 443:443 -v /path/to/vhost.d:/etc/nginx/vhost.d:ro -v /var/run/docker.sock:/tmp/ docker.sock:ro jwilder / nginx-proxy $ {echo'server_tokens off;'; echo'client_max_body_size 100m;'; }> /path/to/vhost.d/app.example.com
按照下面的URL获取更多详细信息
- Docker在docker上的主机运行脚本 – 组成
- OS X上的mariadb docker容器:无法创build数据库目录
- 将环境variables传递给dockerfile构build
- Docker tomcat通过dockerfile编辑configuration文件
- Docker组合错误:compose.cli.main.main:Container命令无法被调用
- docker工不在主机上安装依赖关系(node_modules)
- 如何从docker-compose.ci.build.yml文件构build&推送容器
- 通过使用Docker中设置的环境系统variables,无法从节点连接到MongoDB服务器
- 503服务暂时不可用gitlab docker和nginx-proxy docker