Laravel на Docker: [2002] Соединение отказано - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь установить приложение Laravel на Docker, но контейнер базы данных доставляет мне проблемы.

В частности, я получаю эту ошибку, когда пытаюсь открыть приложение в браузере:

SQLSTATE[HY000] [2002] Connection refused

Но, насколько я вижу, все учетные данные пользователя верны.Возможно, я что-то упустил?См. Ниже.

docker-compose.yml:

version: '3'
services:
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ./yoga/:/var/www
    environment:
      - "DB_PORT=33061"
      - "DB_HOST=database"
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    volumes:
      - ./:/var/www
    ports:
      - 8080:80
  database:
    image: mysql:5.7
    container_name: database
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      - "MYSQL_DATABASE=yogadb"
      - "MYSQL_USER=yogi"
      - "MYSQL_PASSWORD=mypasshere"
      - "MYSQL_ROOT_PASSWORD="
    ports:
        - "33061:3306"

volumes:
  dbdata:

.env:

DB_CONNECTION=mysql
DB_HOST=database
DB_PORT=3306
DB_DATABASE=yogadb
DB_USERNAME=yogi
DB_PASSWORD=mypasshere

Когда я запускаю приложение вне докера, все работает правильно, япросто замените DB_HOST=database на DB_HOST=127.0.0.1

Что я могу сделать, чтобы это исправить?

Докер PS вывод:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
2da7283f7a65        docker_app          "docker-php-entrypoi…"   19 minutes ago      Up 7 seconds        9000/tcp                             docker_app_1
4801fe3312c1        mysql:5.7           "docker-entrypoint.s…"   2 hours ago         Up 7 seconds        33060/tcp, 0.0.0.0:33061->3306/tcp   4801fe3312c1_database
ab370ae1d155        docker_web          "nginx -g 'daemon of…"   25 hours ago        Up 7 seconds        443/tcp, 0.0.0.0:8080->80/tcp        docker_web_1

1 Ответ

0 голосов
/ 07 февраля 2019

Как уже упоминалось @prd, вам нужно создать мостовую сеть для контейнеров [1], затем добавить контейнеры в сеть [2].

Имя хоста контейнера определяется именем службы в docker-compose.yml.В вашем случае, если app служба подключится к database службе с именем хоста database & port 3306.

Итак, docker-compose.yml становится:

version: '3'
services:
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ./yoga/:/var/www
    environment:
      - "DB_PORT=3306"                # Port of database container is 3306
      - "DB_HOST=database"
    networks:
      - name_of_network               # [2] add container to network
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    volumes:
      - ./:/var/www
    ports:
      - 8080:80
  database:                           # Name of service, which determines hostname of container
    image: mysql:5.7
    container_name: database
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      - "MYSQL_DATABASE=yogadb"
      - "MYSQL_USER=yogi"
      - "MYSQL_PASSWORD=mypasshere"
      - "MYSQL_ROOT_PASSWORD="
    ports:
        - "33061:3306"
    networks:
      - name_of_network               # [2] add container to network

volumes:
  dbdata:

networks:
  name_of_network:                    # [1] create bridged network
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...