我有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
答案 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而认为您在一个系统中运行它
我更希望您手动运行迁移
更好