Dockerfile не собирается должным образом на `docker-compose up -d` - PullRequest
0 голосов
/ 21 января 2019

У меня есть проект PHP Laravel.Я новичок в Docker.

У меня есть Dockerfile, созданный из образа php-apache, который сначала устанавливает некоторые пакеты php, php composer, копирует все файлы из моего проекта в папку apache образа docker и сюда... как вы можете видеть ниже (см. Dockerfile) У меня есть RUN composer install --optimize-autoloader --no-dev; \ ..., несколько строк команд php artisan.По какой-то неизвестной причине они не работают должным образом.

Когда я делаю docker-compose up -d, php artisan key:generate --force (см. Файл Docker) не добавляет значение к APP_KEY в файле .env вобраз докера (я проверял это с docker exec -it IMAGE_ID bash && cat .env после того, как образ был собран и запущен).Хотя это говорит Ключ приложения установлен успешно .

Кроме того, php artisan migrate не удается перенести таблицы, он говорит:

In Connection.php line 664:

  SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_s  
  chema.tables where table_schema = homestead and table_name = migrations)     


In Connector.php line 70:

  SQLSTATE[HY000] [2002] Connection refused

Но ... после образасобран и запущен, я делаю логин для его bash -> docker exec -it IMAGE_ID bash, затем я делаю php artisan migrate, и он успешно переносит все таблицы.Это так странно ..

Не могли бы вы помочь мне выяснить, почему Docker не может:

  1. создать ключ приложения?
  2. выполнить миграцию?

Это мой Dockerfile:

FROM php:7.2-apache

RUN apt-get update; \
    apt-get install -y zlib1g-dev git zip unzip; \
    docker-php-ext-install zip pdo_mysql;

COPY --from=composer:1.7.3 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www

COPY ./ ./
COPY .env.example .env
COPY apache-config.conf /etc/apache2/sites-available/000-default.conf

RUN composer install --optimize-autoloader --no-dev; \
    php artisan key:generate --force; \
    php artisan migrate; \
    php artisan db:seed; \
    php artisan cache:clear; \
    php artisan config:cache; \
    php artisan route:cache; \
    php artisan storage:link; \
    chown -R www-data:www-data /var/www;

CMD ["apache2ctl", "-D" , "FOREGROUND"]

Мой apache-config.conf:

ServerName localhost

<VirtualHost *:80>
  ServerAdmin beqalomadze@gmail.com
  ServerName localhost
  DocumentRoot /var/www/public

  <Directory /var/www/public>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order deny,allow
      Allow from all
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Мой docker-compose.yml

version: '3'

services:
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: posts
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - "./data/mysql:/var/lib/mysql"

  app:
    depends_on:
      - mysql
    build:
      context: ./
      dockerfile: Dockerfile
    volumes:
      - "./data/storage-app:/var/www/storage/app"
    ports:
      - 3030:80

Мой .env.example:

...
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=posts
DB_USERNAME=root
DB_PASSWORD=root
...

1 Ответ

0 голосов
/ 21 января 2019

Вы можете попробовать добавить порт в вашем MYSQL conf:

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: posts
      MYSQL_ROOT_PASSWORD: root
    ports:
      - 3306:3306
    volumes:
      - "./data/mysql:/var/lib/mysql"
...