【问题标题】:How to run phpmyadmin along with wordpress docker container using nginx-proxy?如何使用 nginx-proxy 与 wordpress docker 容器一起运行 phpmyadmin?
【发布时间】: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

【问题讨论】:

    标签: wordpress docker nginx phpmyadmin jwilder-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。问题是,如何配置每个应用程序以使用单独的端口?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多