首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试通过驻留在docker容器中的phpmyadmin访问MariaDB数据库

问尝试通过驻留在docker容器中的phpmyadmin访问MariaDB数据库
EN

Stack Overflow用户
提问于 2020-06-30 22:46:46
回答 1查看 974关注 0票数 1

我正在尝试使用docker-compose设置一个基本的LAMP堆栈,但在运行容器时无法使用phpmyadmin连接到mariadb数据库。

为了尝试解决这个问题,我将我的docker-compose.yaml文件剥离为:

代码语言:javascript
复制
version: '3.2'                       

services:
   db:
      image: mariadb
      container_name: appsDB
      restart: always
      ports:
       - '6603:3306'
      environment:
        MYSQL_ROOT_PASSWORD: secret

   app:
      depends_on:
       - db
      image: phpmyadmin/phpmyadmin
      container_name: phpmyadmin
      restart: always
      ports:
       - '8080:80'
      environment:
        PMA_HOST: db

当我运行容器时,我可以导航到phpmyadmin页面,但是当我输入root/secret用户名/密码时,我得到一个错误:

代码语言:javascript
复制
 Cannot log in to the MySQL server
代码语言:javascript
复制
 mysqli::real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known

为了确保这不是我的计算机的问题,我还运行了docker-compose up,并将数据库映像更改为mysql,并保持所有其他细节不变。然后就没有问题了: phpmyadmin工作得很好,我可以使用上一张图片中使用的相同的root/secret凭据正常登录。

有人能告诉我为什么mariadb会这样做吗?有没有什么方法可以让我在docker容器中通过phpmyadmin访问它?

编辑

按照建议检查容器之间的连接,mariadb容器数据库似乎无法启动。docker日志的结果是:

代码语言:javascript
复制
2020-07-01  9:32:22 0 [Warning] 'default-authentication-plugin' is MySQL 5.6 / 5.7 compatible option. To be implemented in later versions.
2020-07-01  9:32:22 0 [Note] mysqld (mysqld 10.4.8-MariaDB-1:10.4.8+maria~bionic) starting as process 1 ...
2020-07-01  9:32:22 0 [Note] InnoDB: Using Linux native AIO
2020-07-01  9:32:22 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2020-07-01  9:32:22 0 [Note] InnoDB: Uses event mutexes
2020-07-01  9:32:22 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2020-07-01  9:32:22 0 [Note] InnoDB: Number of pools: 1
2020-07-01  9:32:22 0 [Note] InnoDB: Using SSE2 crc32 instructions
2020-07-01  9:32:22 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)
2020-07-01  9:32:22 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
2020-07-01  9:32:22 0 [Note] InnoDB: Completed initialization of buffer pool
2020-07-01  9:32:22 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2020-07-01  9:32:22 0 [ERROR] InnoDB: Invalid flags 0x4800 in ./ibdata1
2020-07-01  9:32:22 0 [ERROR] InnoDB: Plugin initialization aborted with error Data structure corruption
2020-07-01  9:32:23 0 [Note] InnoDB: Starting shutdown...
2020-07-01  9:32:23 0 [ERROR] Plugin 'InnoDB' init function returned error.
2020-07-01  9:32:23 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2020-07-01  9:32:23 0 [Note] Plugin 'FEEDBACK' is disabled.
2020-07-01  9:32:23 0 [ERROR] Could not open mysql.plugin table. Some plugins may be not loaded
2020-07-01  9:32:23 0 [ERROR] Unknown/unsupported storage engine: InnoDB
2020-07-01  9:32:23 0 [ERROR] Aborting

有人能告诉我如何在docker中解决这个问题吗?

进一步编辑

为了保持最新,我发现我可以从CLI启动数据库容器,没有任何问题-数据库启动并准备连接:

docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -d mariadb

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-01 10:12:26

您是否正在使用过时版本的图像/容器?您的docker-compose.yml对我来说工作得很好(我的Docker版本是19.03.8,我不认为这很重要)。

我首先尝试强制它重新创建整个堆栈,docker-compose up --force-recreate。我注意到你把这个文件称为docker-compose.yaml,但是正确的默认扩展名应该是Docker;如果你曾经用Docker文件创建过它(或者通过直接指定文件名到docker-compose),我可以想象.yml会默默地(或者至少不明显地)无法重新构建新文件,所以也要仔细检查文件名。

如果这不起作用,我建议进入phpMyAdmin容器的外壳并尝试一些网络命令,看看是否可以直接连接;例如,安装mariadb-client包并尝试mysql -u root -h db -p。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62660150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档