当前位置: 首页 > 知识库问答 >
问题:

docker-up时与mysql连接发生Docker错误

仲孙才捷
2023-03-14

我对docker和mysql有一个问题(我对docker很陌生),我正在尝试将Symfony3.4与docker一起使用。

我有这个错误:

在AbstractMysqldriver.php第103行中:

驱动程序中发生异常:SQLSTATE[HY000][2002]PHP_NETWORK_GETADDRE
SSS:getaddrinfo失败:名称未解析

在pdoConnection.php第47行中:

SQLSTATE[HY000][2002]php_network_getaddress:getaddrinfo失败:名称D
未解析

在pdoConnection.php第43行中:

SQLSTATE[HY000][2002]php_network_getaddress:getaddrinfo失败:名称D
未解析

在pdoConnection.php第43行中:

pdo::__construct():php_network_getaddress:getaddrinfo失败:Name不解析

我真的不知道该怎么办...

这是我的docker-compose:

version: "3"

services:
  apache:
    build: ./docker/apache/
    ports:
      - "80:80"
    depends_on:
      - php
  php:
    build: .
    ports:
      - "8080:8000"
  db:
    image: mysql:8.0.0
    ports:
      - "3306:3306"
    volumes:
      - /docker/database:/etc/mysql/conf.d
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=toor
      - MYSQL_USER=me
      - MYSQL_PASSWORD=pwd
      - MYSQL_DATABASE=name
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_HOST=db
      - PMA_PORT=3306
    ports:
      - "80:80"
    links:
      - db

我的docker文件:

FROM php:7.3-rc-zts-alpine

RUN curl -sS https://getcomposer.org/installer | \
php -- --install-dir=/usr/bin/ --filename=composer

WORKDIR /app

COPY . .

RUN COMPOSER_MEMORY_LIMIT=-1 composer install

RUN docker-php-ext-install pdo_mysql

RUN php bin/console doctrine:schema:update --force

COPY . .

EXPOSE 8080 8000

CMD ["php",  "bin/console", "server:run", "0.0.0.0:8000"]

和我的symfony配置:

parameters:
   database_host: db
   database_port: 3306
   ...

共有2个答案

宫铭
2023-03-14

运行docker-compose时,所有容器都将启动,问题是php容器启动得太快。

而在此之后,数据库服务器将需要很长时间才能启动1秒或更长时间。

php没有耐心,不会重试。

您必须执行循环以检查数据库是否已启动,在我的示例中,我使用nc-z db 3306查看是否连接到主机的端口3306db

使用docker-compose.yml进行设置的示例

version: "3"

services:
  php:
    build: .
    ports:
      - "8080:8000"
  db:
    image: mysql:8.0.0
    ports:
      - "3306:3306"
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=toor
      - MYSQL_USER=me
      - MYSQL_PASSWORD=pwd
      - MYSQL_DATABASE=name

和docker文件

FROM php:7.3-rc-zts-alpine

RUN apk update && apk add netcat-openbsd && apk add mariadb-client

CMD ["/bin/sh","-c", \
     "( while ( ! nc -z db 3306 >/dev/null 2>&1 ) ; do \
           date ; sleep 4 ; \
        done ;  \
        mysql -h db -u me -ppwd name -e \"show databases\"; sleep 3600 ; ) " ]
程志新
2023-03-14

“SQLSTATE[HY000][2002]php_network_getaddrinfo failed:Name dot not resolve”表示数据库服务器的dns名称失败。

我不确定您对database_host使用了什么,但看起来您假设symphony配置将从docker编写过程中解析“db”的位置。事实并非如此。您需要根据运行数据库容器的ip地址创建symfony配置数据库主机。当您将容器编排添加到组合中时,事情将开始变得更加复杂。您应该研究某种形式的服务发现来帮助管理此问题。

 类似资料:
  • 问题内容: 在Windows上安装了Docker,并额外安装了2个Oracle VM VirualBox和Kitematic。我在Windows 10 PC中禁用了Hyper-V。现在的问题是我无法从DockerHub下载任何Docker映像,甚至我都无法以如下方式运行命令 两端都显示以下错误。 尝试连接时发生错误:获取 http:// localhost:2375 / v1.21 / info

  • 问题内容: 我在Windows Home Edition上使用docker工具带。我正在尝试使用docker- compose将Node与Redis一起使用,当我使用来运行映像(在同一源目录中)时,它运行良好,但是当我尝试使用来运行Node时,我的Node应用程序不是’无法连接到Redis。 抛出: 我相信这是因为我的节点应用程序无法找到Redis,即使当我使用该应用程序正在运行时,我也无法在相应

  • 我拉出了mysql docker映像,并用命令运行容器: 此时,springBoot在本地工作。它与MySQL连接: 现在,我希望springBoot应用程序也在单独的docker容器上,在同一服务器上。为此,我使用了DockerFile: 同样,它无法连接到数据库:

  • 我使用了以下命令进行端口映射 其中3306端口属于本地主机MySQL,33060是进入docker容器的端口,因此docker中的3306:33060之间正在进行通信。我的问题如下: docker:守护进程的错误响应:驱动程序未能在endpointApp1上编程外部连接(30EC933973ACF63A48EF9A20B0027AF18BD23E1F36CF852E3758EAA1F843):启动

  • 我正在尝试使用docker-compose运行2个docker容器,并将mysql容器连接到app容器。mysql容器正在运行,但app容器无法启动,出现错误:错误:2003:无法连接到'127.0.0.1:3306'上的mysql服务器(111连接被拒绝)似乎我的app容器正在尝试连接我的主机mysql而不是mysql容器。 Docker-compose.yml DockerFile 这是我的d