尝试通过托管在 docker 容器中的 phpmyadmin 访问 MariaDB 数据库
Trying to access MariaDB databse through phpmyadmin hosted within a docker container
我正在尝试使用 docker-compose
设置一个基本的 LAMP 堆栈,但是当容器 运行.
为了尝试解决这个问题,我将 docker-compose.yaml
文件剥离到:
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
username/password 时,我得到一个错误:
Cannot log in to the MySQL server
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 日志的结果是:
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
您是否正在使用 images/containers 的过时版本?你的 docker-compose.yml 对我来说很好(我的 Docker 版本是 19.03.8,我认为这不重要)。
我会先尝试强制它重新创建整个堆栈,docker-compose up --force-recreate
。我注意到您将此文件称为 docker-compose.yaml
但正确的默认扩展名应该是 .yml;如果您曾经使用 .yml 文件创建过它(或者通过将文件名直接指定给 docker-compose),我可以想象 Docker 会默默地(或至少不明显地)失败重建新文件,因此还要仔细检查文件名。
如果这不起作用,我建议进入 phpMyAdmin 容器的 shell 并尝试一些网络命令以查看是否可以直接连接;例如安装 mariadb-client
包并尝试 mysql -u root -h db -p
.
我正在尝试使用 docker-compose
设置一个基本的 LAMP 堆栈,但是当容器 运行.
为了尝试解决这个问题,我将 docker-compose.yaml
文件剥离到:
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
username/password 时,我得到一个错误:
Cannot log in to the MySQL server
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 日志的结果是:
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
您是否正在使用 images/containers 的过时版本?你的 docker-compose.yml 对我来说很好(我的 Docker 版本是 19.03.8,我认为这不重要)。
我会先尝试强制它重新创建整个堆栈,docker-compose up --force-recreate
。我注意到您将此文件称为 docker-compose.yaml
但正确的默认扩展名应该是 .yml;如果您曾经使用 .yml 文件创建过它(或者通过将文件名直接指定给 docker-compose),我可以想象 Docker 会默默地(或至少不明显地)失败重建新文件,因此还要仔细检查文件名。
如果这不起作用,我建议进入 phpMyAdmin 容器的 shell 并尝试一些网络命令以查看是否可以直接连接;例如安装 mariadb-client
包并尝试 mysql -u root -h db -p
.