无法使用 MariaDb docker-compose 获取 PhpMyAdmin

Posted

技术标签:

【中文标题】无法使用 MariaDb docker-compose 获取 PhpMyAdmin【英文标题】:Unable to get PhpMyAdmin with MariaDb docker-compose 【发布时间】:2020-04-09 20:48:25 【问题描述】:

为了练习我刚接触 Docker,我在本地环境中创建了 docker-compose.yml 文件,但我遇到了 phpMyAdmin 的问题,它出现了一个奇怪的错误

mysqli_real_connect():php_network_getaddresses:getaddrinfo 失败: 名称或服务未知

到目前为止,我已经搜索过它,我知道这是由于 PhpMyAdmin 无法找到服务器。但无法修复。

version: '3'
services:
  myapp:
    image: 'bitnami/codeigniter:3'
    ports:
      - '8000:8000'
    volumes:
      - '.:/app'
    depends_on:
      - mariadb
  mariadb:
    image: 'bitnami/mariadb:10.3'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
  phpmyadmin:
      image: phpmyadmin/phpmyadmin
      container_name: phpmyadmin
      restart: always
      ports:
          - 8080:80
      volumes:
          - /sessions
      links:
          - mariadb

【问题讨论】:

【参考方案1】:

您应该仔细查看documentation for the phpmyadmin image。

PhpMyAdmin 配置为连接到名为“db”的数据库服务器。或者,您可以通过设置 PMA_HOST 环境变量来提供明确的主机名。

另外,您应该停止在您的docker-compose.yml 中使用links。此功能已弃用,并已被 Docker 维护的 DNS 服务取代,该服务允许您的容器通过名称相互引用。

考虑到以上所有因素,您编写的文件应如下所示:

version: '3'

services:
  myapp:
    image: 'bitnami/codeigniter:3'
    ports:
      - '8000:8000'
    volumes:
      - '.:/app'
  mariadb:
    image: 'bitnami/mariadb:10.3'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
  phpmyadmin:
      image: phpmyadmin/phpmyadmin
      restart: always
      ports:
          - 8080:80
      volumes:
          - /sessions
      environment:
        PMA_HOST: mariadb

您也可以将 mariadb 容器命名为“db”,而不是设置 PMA_HOST


您会注意到我对您的撰写文件进行了一些额外的编辑:

我已从您的 phpmyadmin 服务中删除了 containername 设置。通常不需要设置明确的容器名称,并且会阻止您运行此撰写文件的多个实例。

我已经从您的myapp 服务中删除了depends_on,因为它很少有用:虽然它会导致您的myapp 容器在您的mariadb 容器之后启动,但Docker 实际上并不知道是否数据库实际上已启动并运行并准备好为请求提供服务,因此您的应用仍有可能在数据库实际可用之前启动。

最好的解决方案是让您的应用程序重试失败的数据库连接。

【讨论】:

以上是关于无法使用 MariaDb docker-compose 获取 PhpMyAdmin的主要内容,如果未能解决你的问题,请参考以下文章

mariadb 无法以错误开始

Docker 无法使用 PHP 连接到 mariadb

mariadb无法生成run/mysqld

docker 无法使用不同的用户从 localhost 连接到 mariadb

无法使用 DBeaver 连接到本地主机上的 MariaDB

无法通过 Laravel 迁移使用 mysql/mariaDB 功能