如何使用 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 个文件是

phpmyadmin.mydomain.com.key phpmyadmin.mydomain.com.crt wordpress.mydomain.com.key wordpress.mydomain.com.crt

现在,当我执行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=5500VIRTUAL_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

无法使用nginx-proxy和dnsmasq在带有docker-compose的容器之间访问虚拟主机

LB负载均衡之Nginx-Proxy