Docker: тайм-аут подключения при подключении к контейнеру базы данных

У меня проблема с контейнером php, который не подключается к контейнеру базы данных.

Мой docker-compose.yml:

version: "2"

    volumes:
      # this is the mysql data volume we are going to host the data inside
      dev_mysql_data:
      # This volume is used for elasticsearch
      dev_elastic_search:

    networks:
      mp_pixel:
        driver: bridge
        ipam:
          driver: default
          config:
            - subnet: 172.20.0.0/16

    services:
      # database container for local development purposes
      dev_database:
        image: mysql:5.6
        networks:
          mp_pixel:
            aliases:
              - database
        ports:
          # port 3304 (external) is for use on your desktop sql client
          # port 3306 (internal) is for use inside your application code
          - 3304:3306
        volumes:
          # mount the mysql_data docker volume to host the local development database
          - dev_mysql_data:/var/lib/mysql
          # the provision file helps when trying to use the provision script to clone databases
          - ./provision.cnf:/provision.cnf
        environment:
          MYSQL_ROOT_PASSWORD: pixel

      # This is the local development version of the nginx container
      dev_nginx:
        image: mp-pixel-nginx:latest
        build: ./nginx
        ports:
          - '80:80'
          - '443:443'
        networks:
          mp_pixel:
            aliases:
              - nginx
        depends_on:
          - dev_phpfpm
        volumes_from:
          - dev_phpfpm
        environment:
          - VIRTUAL_HOST=~^(mp-pixel|mp-location|mp-feedback|mp-user|mp-phone|mp-loancalculator|mp-seo|mp-media|mp-listing|mp-development|mp-kpi|mp-newsletter|mp-auth|mp-worker|mp-search)-ph-dev.pixel.local

      # This is the local development version of the phpfpm container
      dev_phpfpm:
        image: mp-pixel-phpfpm:latest
        build:
          context: ./
          args:
            # this build might fail, if so, run in a terminal: export SSH_KEY=$(cat ~/.ssh/id_rsa)
            - SSH_KEY=$SSH_KEY
        networks:
          mp_pixel:
            aliases:
              - phpfpm
        depends_on:
          - dev_database
        volumes:
          # we override the images /www directory with the code from the live machine
          - ./:/www
        env_file:
          # inside this file, are the shared database secrets such as username/password
          - ./env/common
          - ./env/dev

      dev_elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:5.3.3
        networks:
          mp_pixel:
            aliases:
              - elasticsearch
        ulimits:
          memlock:
            soft: -1
            hard: -1
          nofile:
            soft: 65536
            hard: 65536
        mem_limit: 1g
        cap_add:
          - IPC_LOCK
        volumes:
          - dev_elastic_search:/usr/share/elasticsearch/data
        ports:
          - 9200:9200
        environment:
          - cluster.name=dev-elasticsearch-pixel
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - "xpack.security.enabled=false"

Я запускаю его с docker-compose up, и журналы php показывают

An exception occured in driver: SQLSTATE[HY000] [2002] Connection timed out

Я пытаюсь получить доступ к контейнеру базы данных с помощью docker exec и могу подтвердить, что у меня есть правильные учетные данные.

В чем может быть проблема?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
5 206
1

Ответы 1

Когда ваши контейнеры работают, вы уже пытались подключиться к базе данных с помощью такого инструмента, как Sequel Pro? Может быть, база данных просто не инициализирована и из-за этого не удается установить соединение из php-контейнера? Вы пытались получить доступ к контейнеру db, но не к самой базе данных.

Кроме того, вы можете добавить еще несколько переменных среды в раздел базы данных вашего docker-compose.yml.

  environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_DATABASE=databasename
      - MYSQL_USER=databaseuser
      - MYSQL_PASSWORD=databasepassword

надеюсь, это поможет

Другие вопросы по теме