如何使用 nginx-proxy 与 wordpress docker 容器一起运行 phpmyadmin?
Posted
技术标签:
【中文标题】如何使用 nginx-proxy 与 wordpress docker 容器一起运行 phpmyadmin?【英文标题】:How to run phpmyadmin along with wordpress docker container using nginx-proxy? 【发布时间】:2021-01-28 02:52:10 【问题描述】:我正在尝试使用 nginx-Proxy 在 Ubuntu VPS 上的 docker 容器内运行 WordPress 应用程序和 phpMyAdmin。
我创建了以下docker-compose.yml
文件
version: '3.4'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- 80:80
- 443:443
restart: always
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /etc/nginx/vhost.d:/etc/nginx/vhost.d:ro
- /etc/certificates:/etc/nginx/certs
wordpress_app:
image: wordpress
restart: always
container_name: wordpress_app
environment:
- VIRTUAL_HOST=wordpress.mydomain.com
- VIRTUAL_PORT=5500
- WORDPRESS_DB_HOST=mysql_server:3306
- WORDPRESS_DB_USER=db_username
- WORDPRESS_DB_PASSWORD=db_password
- WORDPRESS_DB_NAME=wordpress_app
depends_on:
- nginx-proxy
- mysql_server
volumes:
- wordpress_app_public_html:/var/www/html
phpmyadmin:
image: phpmyadmin
container_name: phpmyadmin
restart: always
environment:
- VIRTUAL_HOST=phpmyadmin.mydomain.com
- VIRTUAL_PORT=5600
- PMA_HOST=mysql_server:3306
- MYSQL_USERNAME=root
- MYSQL_ROOT_PASSWORD=db_root_password
depends_on:
- nginx-proxy
- mysql_server
mysql_server:
image: mysql:latest
restart: always
container_name: mysql_server
environment:
- MYSQL_DATABASE=wordpress_app
- MYSQL_USER=db_username
- MYSQL_PASSWORD=db_password
- MYSQL_ROOT_PASSWORD=db_root_password
volumes:
- mysql_server_data:/var/lib/mysql
volumes:
wordpress_app_public_html:
mysql_server_data:
networks:
default:
external:
name: nginx-proxy
在/etc/certificates
路径中,我为每个域添加了.key
和.crt
文件。存在的4 个文件是
现在,当我执行docker-compose up
时,我可以毫无问题地浏览https://wordpress.mydomain.com
。但是,当我浏览 http://phpmyadmin.mydomain.com
时出现以下错误
503 服务暂时不可用 nginx/1.17.5
当我浏览到https://phpmyadmin.mydomain.com
时,我得到一个空白页。
如何才能成功浏览 php-my-admin 实例?
更新
这是我根据以下反馈更新的docker-compose.yml
文件
version: '3.4'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- 80:80
- 443:443
restart: always
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /etc/certificates:/etc/nginx/certs
wordpress_app:
image: wordpress
restart: always
container_name: wordpress_app
environment:
- VIRTUAL_HOST=wordpress.mydomain.com
- WORDPRESS_DB_HOST=mysql_server:3306
- WORDPRESS_DB_USER=db_username
- WORDPRESS_DB_PASSWORD=db_password
- WORDPRESS_DB_NAME=wordpress_app
depends_on:
- nginx-proxy
- mysql_server
volumes:
- wordpress_app_public_html:/var/www/html
expose:
- 80
phpmyadmin:
image: phpmyadmin
container_name: phpmyadmin
restart: always
environment:
- VIRTUAL_HOST=phpmyadmin.mydomain.com
- PMA_HOST=mysql_server:3306
- MYSQL_USERNAME=root
- MYSQL_ROOT_PASSWORD=db_root_password
depends_on:
- nginx-proxy
- mysql_server
expose:
- 80
mysql_server:
image: mysql:latest
restart: always
container_name: mysql_server
environment:
- MYSQL_DATABASE=wordpress_app
- MYSQL_USER=db_username
- MYSQL_PASSWORD=db_password
- MYSQL_ROOT_PASSWORD=db_root_password
volumes:
- mysql_server_data:/var/lib/mysql
volumes:
wordpress_app_public_html:
mysql_server_data:
networks:
default:
external:
name: nginx-proxy
【问题讨论】:
【参考方案1】:jwilder/nginx-proxy 镜像通常会响应
503 服务暂时不可用 nginx/1.17.5
当您找不到所需的服务时。
据我所见,您在变量 VIRTUAL_PORT
中遇到了问题 我确信 wordpress 图像 (https://hub.docker.com/_/wordpress)
和 phpmyadmin 图像 (https://hub.docker.com/_/phpmyadmin)
分别暴露端口 80 而不是 5500 和 5600。那么您的问题的解决方案可能如下:
wordpress_app:
image: wordpress
restart: always
container_name: wordpress_app
environment:
- VIRTUAL_HOST=wordpress.mydomain.com
- VIRTUAL_PORT=80
- WORDPRESS_DB_HOST=mysql_server:3306
- WORDPRESS_DB_USER=db_username
- WORDPRESS_DB_PASSWORD=db_password
- WORDPRESS_DB_NAME=wordpress_app
depends_on:
- nginx-proxy
- mysql_server
volumes:
- wordpress_app_public_html:/var/www/html
phpmyadmin:
image: phpmyadmin
container_name: phpmyadmin
restart: always
environment:
- VIRTUAL_HOST=phpmyadmin.mydomain.com
- VIRTUAL_PORT=80
- PMA_HOST=mysql_server:3306
- MYSQL_USERNAME=root
- MYSQL_ROOT_PASSWORD=db_root_password
depends_on:
- nginx-proxy
- mysql_server
【讨论】:
感谢您的反馈。我根据您的建议从VIRTUAL_PORT=5500
和VIRTUAL_PORT=5600
切换到使用VIRTUAL_PORT=80
,但这不起作用。我还完全删除了VIRTUAL_PORT=80
,但仍然没有工作
很抱歉我的解决方案不起作用,您是否已经检查了 nginx 日志和其他服务以查看它的内容?
感谢您的帮助。日志位于何处以便我可以查看它们?如果我简单地运行docker-compose up
,当我尝试访问https://phpmyadmin.mydomain.com
时,屏幕上什么也没有打印,但如果我到达https://wordpress.mydomain.com
,我确实看到正在打印日志,这些都是很好的成功日志。就像https://phpmyadmin.mydomain.com
没有到达服务器或者没有被路由
如果我停止 wordpress
容器,那么 https://wordpress.mydomain.com
会显示 phpmyadmin 页面。这告诉我两个应用程序都在使用导致冲突的端口 80。问题是,如何配置每个应用程序以使用单独的端口?以上是关于如何使用 nginx-proxy 与 wordpress docker 容器一起运行 phpmyadmin?的主要内容,如果未能解决你的问题,请参考以下文章
在 nginx/nginx-proxy 容器中使用 Nextcloud 以及其他服务
Docker使用nginx-proxy对Nextcloud进行https反向代理
.NetCore中IdentityServer使用nginx-proxy的一次排错经历
php 这个WordPress插件演示了如何使用WordPress提供的可拖动元文件构建自己的插件页面,需要WordPr