繁体   English   中英

在 docker-compose.yml 中运行命令

[英]run command in docker-compose.yml

我有 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 及其我的 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"]


谁能帮我??? 我想在 app bash 中运行composer install

对于第 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,应用程序认为您在一个系统中运行它
我更喜欢你手动运行迁移
它更好

而不是直接(或手动)执行 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.yml 上进行以下更改之前。 引导文件将在您第一次执行docker-compose up自动执行。 您需要删除 MySQL 卷才能使其适用于您的堆栈docker volume rm dbdata

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM