连接到Docker MySQL容器时凭据错误
Docker的新手和我正在使用laradock通过Craft CMS项目设置我的环境。我能够安装并设置,但是当我尝试连接到laradock从docker-compose.yml
文件创建的MySQL容器时,我遇到了问题。连接到Docker MySQL容器时凭据错误
下面是相关的部分数据库在我docker-compose.yml
mysql:
build:
context: ./mysql
args:
- MYSQL_DATABASE=homestead
- MYSQL_USER=homestead
- MYSQL_PASSWORD=secret
- MYSQL_ROOT_PASSWORD=root
volumes:
- mysql:/var/lib/mysql
ports:
- "3306:3306"
在我的craft/config/db.php
文件,我有以下设置:
return array(
'.dev' => array(
'tablePrefix' => 'craft',
'server' => 'mysql',
'database' => 'homestead',
'user' => 'homestead',
'password' => 'secret',
),
);
不过,我得到一个Craft can’t connect to the database with the credentials in craft/config/db.php
错误。
我的问题是 - 当docker创建MySQL容器时,我假定它使用docker-compose.yml
文件中的凭据来创建并允许访问该数据库。如果是这样,只要我的容器正在运行,并且我的db.php
文件中的凭据与docker-compose.yml
文件中的凭据相匹配,是否应该不连接?
如果我想更新MySQL容器中的凭证,我可以只更新这两个文件中的值并运行docker-compose up -d mysql
?
谢谢!
我最近在类上运行,因为容器是以“随机”顺序启动的。也许这是你的问题,不知道肯定。
简而言之,这是我的情况: - 两个容器php-fpm
和mysql
。 - 运行docker-compose up -d --build --no-cache
建立的一切,但php-fpm
首先完成这么届时mysql
在做一些东西为获取服务准备 - php-fpm
应用程序无法连接到MySQL服务器,因为还没有准备好
该解决方案使用新的泊坞窗撰写版本并在docker-compose.yml
上使用2.1。这是我的工作例如:
version: '2.1'
services:
php-fpm:
build:
context: docker/php-fpm
depends_on:
db:
condition: service_healthy
db:
image: mariadb
healthcheck:
test: "exit 0"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
诀窍:depends_on
(check here)和condition
(查看示例)。
对不起,上面显示的代码显示了我不确定的内容:为什么我们在docker-compose.yml文件中看到例如MYSQL_ROOT_PASSWORD:$ {MYSQL_ROOT_PASSWORD}?这个$ {MYSQL_ROOT_PASSWORD}存储在哪里?似乎有些人已将密码存储在此文件中。或者是否引用.env文件?非常感谢! – nadir
@nadir在这种情况下,我说的是在'.env'文件中将密码存储在纯文本中,但是有更好的策略,这里有一个简单的策略 – ReynierPM
谢谢你的回答ReynierPM。顺便说一下,我找到了解决方案。因此,对于任何人在laradock上对PhpMyAdmin提出同样问题:host = mysql/user = root/password = root – nadir
您仍然想念配置中的数据库主机。 您可以: - 将数据库服务链接到您的应用服务,并在'craft/config/db.php'中使用数据库服务名称作为主机名(在您的情况下为'mysql') - 将docker桥地址设置为数据库主机并使用映射到主机(端口部分)的端口。 –