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 prune
和 docker volume prune
的所有内容以上是关于docker-compose:无法从我的 LEMP 堆栈访问 phpMyAdmin的主要内容,如果未能解决你的问题,请参考以下文章
为啥我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务
将 LEMP Wordpress 站点手动迁移到子域以进行测试/开发