反向代理到WordPress容器
我正在尝试通过Docker创build一个WordPress
容器。 但是我在host
上安装了NGINX
, MySQL
和Let'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 Gateway
redirect到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,因为我个人喜欢用
http2
和pagespeed
模块从源代码构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