2017-02-10 96 views
0

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

谢谢!

+0

您仍然想念配置中的数据库主机。 您可以: - 将数据库服务链接到您的应用服务,并在'craft/config/db.php'中使用数据库服务名称作为主机名(在您的情况下为'mysql') - 将docker桥地址设置为数据库主机并使用映射到主机(端口部分)的端口。 –

回答

0

我最近在上运行,因为容器是以“随机”顺序启动的。也许这是你的问题,不知道肯定。

简而言之,这是我的情况: - 两个容器php-fpmmysql。 - 运行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_oncheck here)和condition(查看示例)。

+0

对不起,上面显示的代码显示了我不确定的内容:为什么我们在docker-compose.yml文件中看到例如MYSQL_ROOT_PASSWORD:$ {MYSQL_ROOT_PASSWORD}?这个$ {MYSQL_ROOT_PASSWORD}存储在哪里?似乎有些人已将密码存储在此文件中。或者是否引用.env文件?非常感谢! – nadir

+0

@nadir在这种情况下,我说的是在'.env'文件中将密码存储在纯文本中,但是有更好的策略,这里有一个简单的策略 – ReynierPM

+0

谢谢你的回答ReynierPM。顺便说一下,我找到了解决方案。因此,对于任何人在laradock上对PhpMyAdmin提出同样问题:host = mysql/user = root/password = root – nadir