在docker-compose.yml中运行命令

时间:2020-03-13 10:01:20

标签: mysql laravel docker docker-compose

我有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 migration之后向用户授予权限 和我的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"]


有人可以帮助我吗??? 我想在应用bash中运行composer install

2 个答案:

答案 0 :(得分:1)

而不是直接(或手动)执行MySQL命令。您可以使用以下方法使用所有必需的数据和配置来引导MySQL容器。

1-创建一个引导文件: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-compose文件中使用它。您需要在docker-compose进行以下更改之前。引导文件将在您执行docker-compose up第一次时自动执行。您需要删除MySQL卷以使其适用于您的堆栈docker volume rm dbdata

db:
    build:
      context: .
      dockerfile: mysql.Dockerfile

答案 1 :(得分:1)

对于步骤2-8,您必须像我们的朋友所说的那样 使用sql命令创建引导文件并在dockerfile中运行 要么 您可以在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

以及与工匠生成密钥无关,
应用程序由于docker而认为您在一个系统中运行它
我更希望您手动运行迁移
更好