запустить команду в docker -compose.yml - PullRequest
0 голосов
/ 13 марта 2020

У меня есть laravel проект, и я должен создать для этого контейнер docker. Я сделал это, но для MySQL я должен выполнить несколько команд

docker-compose exec app php artisan key:generate
docker-compose exec db bash
mysql -u root -p
Login Using password Library!23
GRANT ALL ON laravel.* TO 'root'@'%' IDENTIFIED BY '123';
FLUSH PRIVILEGES;
EXIT;
exit
docker-compose exec app php artisan migrate

В приложении строки 2 переключите bash, и я должен выйти, чтобы запустить команды, но мне нужно открыть MySQL bash войдите в систему и дайте разрешение пользователю после этого запустите artisan migrate и его my docke-compose.yml

version: '3'
services:

  #PHP Service
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: xxxxxxx/lumen:Library
    container_name: Library
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /var/www
    volumes:
      - ./:/var/www
    networks:
      - app-network

  #Nginx Service
  webserver:
    image: nginx:alpine
    container_name: LibraryWebserver
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./:/var/www
      - ./nginx/conf.d/:/etc/nginx/conf.d/
    networks:
      - app-network

  #MySQL Service
  db:
    image: mysql:5.7.22
    container_name: Librarydb
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: library
      MYSQL_ROOT_PASSWORD: Library!23
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    networks:
      - app-network
    volumes:
      - dbdata:/var/lib/mysql
#Docker Networks
networks:
  app-network:
    driver: bridge
#Volumes
volumes:
  dbdata:
    driver: local

и мой Dockerfile

FROM php:7.4-fpm

COPY composer.lock composer.json /var/www/

WORKDIR /var/www

RUN apt-get update --fix-missing && apt-get install -y  \
    build-essential \
    libssl-dev \
    zlib1g-dev \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    zlibc \
    mariadb-client \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    jpegoptim optipng pngquant gifsicle \
    vim \
    unzip \
    git \
    curl \
    zip

RUN docker-php-ext-install opcache  && docker-php-ext-enable opcache

RUN apt-get clean && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install pdo_mysql exif pcntl
#RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install bcmath

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

EXPOSE 9000
CMD ["php-fpm"]


может кто-нибудь мне помочь ??? и я хочу запустить composer install в приложении bash

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

для шага 2 - 8 вы должны сделать так, как говорят наши друзья: создайте файл bootstrap с помощью команд sql и запустите его в своем файле Docker, или вы можете создать пользователя и передать и предоставить ему доступ администратора в docker - compose.yml

 db:
    image: mysql:5.7.22
    container_name: Librarydb
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: library
      MYSQL_ROOT_PASSWORD: TheRootPassword
      MYSQL_USER: root
      MYSQL_PASSWORD: PasswordForLoginAndUse
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    networks:
      - app-network
    volumes:
      - dbdata:/var/lib/mysql

и о генерации ключа с помощью artisan его не нужно
приложение думает, что вы запускаете его в одной системе из-за docker
, и я предпочитаю запускать миграцию вручную
лучше

1 голос
/ 13 марта 2020

вместо выполнения команд MySQL напрямую (или вручную). Вы можете bootstrap MySQL контейнеры со всеми необходимыми данными и конфигурациями, используя следующий подход.

1- Создайте файл bootstrap: sql -scripts. sql

GRANT ALL ON laravel.* TO 'root'@'%' IDENTIFIED BY '123';
FLUSH PRIVILEGES;

2 - Создайте пользовательское MySQL Docker изображение: mysql .Dockerfile

FROM mysql:8.0.1
COPY ./sql-scripts.sql /docker-entrypoint-initdb.d/

3 - создайте MySQL docker изображение и используйте его в своем docker - составить файл. Вам необходимо до изменения ниже на docker -компонент. Файл bootstrap будет автоматически выполнен ПЕРВЫЙ РАЗ , который вы выполните docker-compose up. вам нужно удалить том MySQL, чтобы это работало для вашего стека docker volume rm dbdata.

db:
    build:
      context: .
      dockerfile: mysql.Dockerfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...