【问题标题】:Automate project in laravel在 laravel 中自动化项目
【发布时间】:2019-09-15 23:36:05
【问题描述】:

我在 Laravel 中有一个带有 .env.local 文件的应用程序(我制作了下一个 docker-compose 文件:

api:
container_name: nadal_api
build:
  context: .
  dockerfile: Dockerfile
volumes:
  - .:/var/www/html/app
ports:
  - ${APP_PORT}:80
links:
  - db
  - redis

还有我的 Dockerfile:

FROM composer:latest AS composer

WORKDIR /var/www/html/app/



FROM php:7.2-fpm-stretch

RUN apt-get update && apt-get install -y \
    supervisor \
    nginx \
    zip

ADD docker/nginx.conf /etc/nginx/nginx.conf ADD
docker/virtualhost.conf /etc/nginx/conf.d/default.conf ADD
docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

ARG enviroment

COPY --from=composer /usr/bin/composer /usr/bin/composer

COPY .env.local .env RUN chmod -R g+w /var/www/html/app/bootstrap

RUN composer install RUN php artisan key:generate

EXPOSE 80

CMD ["/usr/bin/supervisord"]

我想克隆存储库,并在 docker-compose 构建时在 dockerfile 中执行以下操作:

  1. 将 .env.local 重命名为 .env
  2. 授予存储文件夹的权限。我在这一行有错误
RUN chmod -R g+w /var/www/html/app/bootstrap

chmod: cannot access '/var/www/html/app/bootstrap': No such file or
directory
  1. docker-compose.yaml: ${APP_PORT} 从 .env.local 获取值(我尝试使用 env_file 但它不起作用

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    在您的Dockerfile 中,没有COPY 操作可将所有当前项目代码复制到创建的映像中。因此,您的映像中不存在 bootstrap 文件夹。所以chmod 就是这样告诉你的。

    Volumes (这一行 - .:/var/www/html/app) 将在稍后根据图像结构创建容器时将当前目录与容器同步。因此,如果您想授予引导文件夹的权限,请在授予权限之前将项目代码复制到映像中。 在权限操作之前添加此行以使文件夹可访问。

    COPY . /var/www/html/app
    

    【讨论】:

    • 谢谢,它成功了。你知道 ${APP_PORT} 吗?我需要 .env.local 而不是 .env
    • 为什么需要复制和重命名?当您复制整个项目时,.env 也会复制到容器中。因此,在开始构建之前,只需在 .env 文件中编辑基于环境的值,一切都会好起来的 :)
    • .env 是被忽略的文件,因为您的所有机密信息都将在此文件中。您可以发现它已添加到 .gitignore 文件中。因此,如果您希望您的配置适用于您的应用程序,只需将 .env.example 文件复制为 .env 并添加您的配置。然后开始图像构建过程。然后那里会有 .env 文件),您可以在容器中使用所有 env 变量。
    • 如果您在我的答案中添加该行,那么全部。您的应用程序中的文件将在您的图像中。所以 composer.json 文件也将在那里。并且由于您设置 WORKDIR 正确运行 composer install 必须将所有供应商文件添加到图像中。我现在也不能尝试复制,但我猜你的副本会在图像中创建正确的 .env 文件。如果不是,那么在我的答案中添加该行后,只需使用 linux move 命令重命名文件。 RUN mv .env.local .env 然后会有重命名的.env文件:)
    猜你喜欢
    • 2019-10-14
    • 2012-11-14
    • 2019-07-31
    • 1970-01-01
    • 2021-04-16
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多