反向代理到WordPress容器

我正在尝试通过Docker创build一个WordPress容器。 但是我在host上安装了NGINXMySQLLet's Encrypt

所以,我的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 

和我的NGINXconfiguration是:

 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 ,我用502 Bad Gatewayredirect到https://domain.com

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端口的请求,redirect到Docker容器。

限制:

  • 我不想Dockerize MySQL,这是最后的。
  • 我不想Dockerize NGINX,因为我个人喜欢用http2pagespeed模块从源代码构build它。

问题是关于networkingconfiguration我想。 您的容器使用端口80为WordPress和您的主机使用相同的端口为Nginx。 当你使用net:“host”( https://docs.docker.com/engine/reference/run/#/network-settings )时,你的容器使用主机的networking堆栈,并且它们会试图绑定到同一个端口。

如果您的mysql服务器是可以远程访问的,只需删除net:“host”部分,并将mysql主机configurationreplace为远程连接即可。 它应该只是工作。

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

这对我有用

 version: '3.1' services: db: image: mysql:5.7 volumes: - ./db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:4.8.2-apache volumes: - ./wordpress:/var/www/html - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini restart: always environment: - VIRTUAL_HOST=blog.dom.local - WORDPRESS_DB_HOST=db:3306 - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress nginx-proxy: image: jwilder/nginx-proxy ports: - "80:80" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro