我正在使用 docker-compose 3.7 和 Laravel 5.8 的重要安装进行一些测试。
我的目标是在nginx和php服务容器之间共享我的Laravel应用程序卷app-vol
。
我尝试如下进行操作,但失败了。
我的docker-compose.yml有以下几行:
version: '3.7'
services:
nginx:
container_name: laravel_nginx
image: nginx:1.15.3-alpine
restart: unless-stopped
volumes:
- './docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro'
- 'app-vol:/usr/src/app:rw'
ports:
- "8000:80"
mysql:
container_name: laravel_mysql
image: mysql:5
restart: unless-stopped
ports:
- "3330:3306"
env_file:
- .env
php:
container_name: laravel_php
build:
context: .
dockerfile: Dockerfile
volumes:
- './docker/xdebug/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini:ro'
- './docker/php/php.ini:/usr/local/etc/php/php.ini:ro'
- 'app-vol:/usr/src/app:rw'
env_file:
- .env
depends_on:
- mysql
- nginx
volumes:
app-vol:
这是我的Dockerfile。
FROM php:7.2-fpm-alpine
RUN apk update && apk add --no-cache \
mysql-client \
libpng-dev \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& rm -rf /tmp/*
COPY --chown=www-data:www-data . /usr/src/app
WORKDIR /usr/src/app
RUN composer install --no-progress --no-suggest --no-interaction
我用docker-compose build --no-cache
构建我的作品,然后从docker-compose up -d
开始。
然后我进入php容器以生成laravel的APP_KEY
;需要运行该应用程序:
php artisan key:generate
但是,刷新我的localhost:8000
之后,我似乎从未执行过key:generate
命令,这很奇怪,因为如果我进入php或nginx容器,我可以在{{1}处看到生成的密钥}文件。
当然,我尝试运行工匠命令.env
和cache:clear
,但结果仍然相同。
我怀疑问题在于Dockerfile完成的文件复制。我是否需要事先将项目文件复制到外部卷上,然后将其安装在两个容器上?