首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法连接到docker中的mysql容器和php之间

问无法连接到docker中的mysql容器和php之间
EN

Stack Overflow用户
提问于 2019-01-27 21:37:43
回答 2查看 3.1K关注 0票数 2

试图从php:最新映像(没有apache或nginx)连接到mysql 8(mysql:最新),我得到了这个恼人的错误:

代码语言:javascript
复制
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection refused in /src/conn.php:5
Stack trace:
#0 /src/conn.php(5): PDO->__construct('mysql:host=data...', 'root', '12345678')
#1 {main}
  thrown in /src/conn.php on line 5

我已经在堆栈溢出上寻找了+20的解决方案,但是没有一个能够解决我的问题。使用mysql工作台或DataGrid可以使用以下凭据进行连接,而不存在任何问题:

服务器:本地主机用户:根传递: 12345678

但是,我在php映像上使用的任何配置都不能使它们彼此连接。

我的船坞-撰写文件:

代码语言:javascript
复制
version: '3'
services:
  composer:
    container_name: composer
    networks:
      - backend
    image: composer
    volumes:
      - .:/app
    command: install
  database:
    container_name: mysql
    networks:
      - backend
    image: mysql:latest
    volumes:
      - ./database/mysqldata:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: 12345678
      MYSQL_DATABASE: testdb
    ports:
      - "3306:3306"
  php:
    build:
      context: .
    container_name: php
    networks:
      - backend
    image: php:apache
    links:
      - database
    env_file:
      - .env
    volumes:
      - .:/
    command:
      php /src/conn.php
    depends_on:
      - composer
      - database
networks:
  backend:

我的conn.php:

代码语言:javascript
复制
<?php
    $db = new PDO('mysql:host=database;dbname=testdb', 'root', '12345678');

我为解决这个问题所做的努力:

  1. 将conn.php主机更改为127.0.0.1
  2. 将conn.php主机更改为本地主机
  3. 尝试使用mysqli (也拒绝连接)
  4. 尝试了另一个php映像(使用apache、nginx等)
  5. 尝试使用mysql作为主机

PS:我用的是mac的码头

经过5个小时的研究,我真的不知道还能做些什么,而且我也不是码头专家,我希望能为我指明修复的方向。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-28 12:41:16

找到了解决办法。结果是,在启动php脚本之前,我需要等待mysql服务可用。因此,我使用了等-它-它解决方案,并在docker上这样做:

代码语言:javascript
复制
 command: >
      bash -c "chmod +x /docker/./wait-for-it.sh
      && /docker/./wait-for-it.sh database:3306 -- echo 'database is up'
      && php phpscript.php"

谢谢你的帮助

票数 0
EN

Stack Overflow用户

发布于 2019-01-28 02:09:05

在您的例子中,您不能通过localhost或127.0.0.1连接mysql。如果你这样联系的话。它调用localhost inside php容器。但是您的php容器中没有mysql安装。

您必须通过容器名来控制name。或者docker inspect您mysql容器并获得容器IP。例如,与您的码头-撰写

代码语言:javascript
复制
database:
    container_name: mysql

现在您的mysql数据库主机是mysql -容器名,而不是localhost。

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

https://stackoverflow.com/questions/54393117

复制
相关文章

相似问题

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