@gigisarri98

Как выполнить миграцию в контейнере Docker?

Запускаю проект через docker-compose up - и получаю: SQLSTATE[HY000] [2002] Connection refused.

При этом, если выполнить php artisan migrate в самом контейнере в интерактивном режиме, то все ок. Пожалуйста, помогите, не знаю уже что и делать. Все перепробовал, хочется чтобы проект поднимался сразу через docker compose-up, без дополнительных танцев с бубном.

Dockerfile:
FROM php:7.3-apache

WORKDIR /var/www/html

COPY . .

# ENV DB_HOST="db"

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
    && apt update && apt install -y git zip unzip \
    && docker-php-ext-install pdo_mysql \
    && a2enmod rewrite \
    && composer install \
    && chmod -R 0777 storage/

ENTRYPOINT ["/var/www/html/run.sh"]


run.sh:
#!/bin/bash

php artisan cache:clear
php artisan config:clear

php artisan migrate

docker-compose.yml:
version: "3.9"

services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 1111
      MYSQL_DATABASE: parser
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    networks:
      - parser_docker_network

  server:
    depends_on:
      - db
    environment:
      DB_HOST: db
    build: .
    ports:
      - "8100:80"
    restart: always
    volumes:
      - ./conf/vhost.conf:/etc/apache2/sites-enabled/000-default.conf
      - ./conf/hosts:/etc/hosts
    networks:
      - parser_docker_network

networks:
  parser_docker_network:
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
Viji
@Viji
Associate DevOps Engineer
Привет,

1. Скорее всего у тебя env vars в docker compose не правильно указаны, они должны быть в секции server, а не в секции db или в обоих
2. попробуй в run.sh вместо php artisan migrate, написать sleep 1800
зайди внутрь работающего php containerа с помощью docker exec -ti container_id bash и выполни там env - посмотри есть ли variables for php script to work
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы