docker-compose:无法从我的 LEMP 堆栈访问 phpMyAdmin

Posted

技术标签:

【中文标题】docker-compose:无法从我的 LEMP 堆栈访问 phpMyAdmin【英文标题】:docker-compose: cannot access to phpMyAdmin from my LEMP stack 【发布时间】:2020-06-09 19:09:45 【问题描述】:

我刚刚使用 docker 和 docker-compose 创建了一个 LEMP 堆栈(Linux、nginx、MariaDB、php-FPM)。 但不知何故,我无法通过 phpMyAdmin 访问我的数据库。

当我尝试访问 phpMyAdmin 网络服务器时,出现以下错误:

mysql 说:文档

无法连接:无效设置。

数据包乱序。预计收到 0 个 1. 数据包大小=69

mysqli_real_connect():读取问候包时出错。 PID=18

mysqli_real_connect(): (HY000/2006): MySQL 服务器已经消失

phpMyAdmin 尝试连接 MySQL 服务器,但服务器拒绝连接。您应该检查配置中的主机、用户名和密码,并确保它们与 MySQL 服务器管理员提供的信息相对应。

其余的工作正常。

这是我的docker-compose.yml 文件:

version: "3.3"
services:

    nougat:  #Nginx Server
        image: tutum/nginx:latest
        ports:
            - "8080:80"
        links:
            - papaya  # PHP-FPM service
        volumes:
            - type: bind
              source: ./nginx
              target: /etc/nginx/sites-available

            - type: bind
              source: ./nginx
              target: /etc/nginx/sites-enabled

            - type: bind
              source: ./logs/nginx-error.log
              target: /var/log/nginx/error.log

            - type: bind
              source: ./logs/nginx-access.log
              target: /var/log/nginx/access.log

    papaya:  # PHP-FPM service
        build: .
        volumes:
            - type: bind
              source: ./public
              target: /usr/share/nginx/html

    mango:  # MariaDB database
        image: mariadb:10.5.1
        volumes:
            - type: bind
              source: ./mango_database
              target: /var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: admin

    pomegranate:  # phpMyAdmin web-service
        image: phpmyadmin/phpmyadmin:4.9.4
        restart: always
        links:
            - mango:mysql  # MySQL database
        ports:
            - "8081:80"
        environment:
            PMA_HOST: mysql
            PMA_USER: root
            PMA_PASSWORD: admin
            PMA_ARBITRARY: 1

这是我的Dockerfile

FROM php:7.4.3-fpm

RUN docker-php-ext-install pdo pdo_mysql

RUN apt-get update -y && apt-get install -y libwebp-dev libjpeg62-turbo-dev libpng-dev libxpm-dev \
    libfreetype6-dev

RUN apt-get update && \
    apt-get install -y \
        zlib1g-dev 

RUN apt-get install -y libzip-dev

RUN docker-php-ext-install zip

RUN docker-php-ext-install gd

提前感谢您的帮助。

【问题讨论】:

链接是一项旧功能,不应使用 (docs.docker.com/network/links)。改用网络:docs.docker.com/compose/networking,您可以将所有服务连接在一起。重要说明:您可以按名称访问服务 【参考方案1】:

使用networks 将您的所有服务连接在一起

docker-compose.yml

version: "3.3"
services:

    nougat:  #Nginx Server
        image: tutum/nginx:latest
        ports:
            - "8080:80"
        networks:         # <-- Add this line
            - random_name # <-- Add this line
        # links:          # <-- Remove this
        #     - papaya    # <-- Remove this
        volumes:
            - type: bind
              source: ./nginx
              target: /etc/nginx/sites-available

            - type: bind
              source: ./nginx
              target: /etc/nginx/sites-enabled

            - type: bind
              source: ./logs/nginx-error.log
              target: /var/log/nginx/error.log

            - type: bind
              source: ./logs/nginx-access.log
              target: /var/log/nginx/access.log

    papaya:  # PHP-FPM service
        build: .
        networks:         # <-- Add this line
            - random_name # <-- Add this line
        volumes:
            - type: bind
              source: ./public
              target: /usr/share/nginx/html

    mango:  # MariaDB database
        image: mariadb:10.5.1
        networks:         # <-- Add this line
            - random_name # <-- Add this line
        volumes:
            - type: bind
              source: ./mango_database
              target: /var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: admin

    pomegranate:  # phpMyAdmin web-service
        image: phpmyadmin/phpmyadmin:4.9.4
        restart: always
        # links:            # <-- Remove this
        #     - mango:mysql # <-- Remove this
        ports:
            - "8081:80"
        networks:         # <-- Add this line
            - random_name # <-- Add this line
        environment:
            PMA_HOST: mysql
            PMA_USER: root
            PMA_PASSWORD: admin
            PMA_ARBITRARY: 1

networks:         # <-- Add this line
    random-name:  # <-- Add this line

【讨论】:

感谢您的帮助。我试过了,但它不起作用。顺便说一句,声明网络的目的是什么?当您 docker-compose up 时,docker-compose 不应该创建一个 default_network 吗?无论如何,我仍在寻找解决方案。 使用 docker conpose 网络,您希望确保服务连接到与您想要访问的其他服务相同的网络,并允许网络隔离(如果需要)。如果您仍然有问题,请尝试清理 docker network prunedocker volume prune 的所有内容

以上是关于docker-compose:无法从我的 LEMP 堆栈访问 phpMyAdmin的主要内容,如果未能解决你的问题,请参考以下文章

LEMP顶部的蒸汽

为啥我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务

将 LEMP Wordpress 站点手动迁移到子域以进行测试/开发

Docker-compose env var无法正常工作

尝试使用带有自定义 conf.d 的 docker-compose 运行 nginx 时出错

docker-compose:nodejs + mysql无法连接mysql