将Laravel的.env文件复制到Docker容器中

时间:2017-07-08 10:30:26

标签: laravel ubuntu docker

设置

我在我的Ubuntu服务器上运行Docker,我正在尝试创建一个Laravel容器来运行我的网站与工匠。 Laravel项目位于GitHub存储库中,我使用dockerfile将项目克隆到docker容器。

问题

出于安全原因,Laravel项目依赖于repo项目中未包含的.env(环境文件)。因此,当我将repo克隆到docker容器时,它不包含.env文件,因此无法正常运行网站。我在我的Ubuntu上本地有一个.env文件,我试图COPY到Docker容器Laravel项目文件夹,当然它不起作用。这是因为它正在寻找docker容器文件结构中的目录。

错误

Step 6/11 : COPY /containers/.env .env

lstat containers/.env: no such file or directory

问题

如何使用COPY命令将.env文件从ubuntu服务器复制到docker容器?

文件结构(Ubuntu)源自:

root/
  containers/
    - docker-compose
    - .env

文件结构(docker container)来源:

root/
  var/www/

dockerfile

FROM hitalos/laravel

RUN git config --system http.sslverify false

RUN git clone repo /var/www

RUN git checkout test

COPY /containers/.env .env

# Run Compser Install
RUN composer install -d /var/www
RUN php /var/www/artisan key:generate

WORKDIR /var/www

CMD php /var/www/artisan serve --port=80 --host=0.0.0.0
EXPOSE 80

2 个答案:

答案 0 :(得分:1)

COPY中的路径相对于Dockerfile

只需将其更改为COPY containers/.env /var/www/.env

即可

编辑: 好像你在构建时(图像)没有.env文件,只在运行时(容器)。这意味着,您必须在运行容器时挂载文件。

从Dockerfile中删除COPY ...命令,而是使用

运行容器

-v /containers/.env:/var/www/.env

这样的事情:

docker run... -v /containers/.env:/var/www/.env ...

或在compose yml文件中更改它

答案 1 :(得分:1)

简单地复制.env文件是行不通的,因为您还必须在文件上运行source命令,然后使用export命令将每个环境变量添加到路径中。

由于您使用的是docker-compose,因此您可以在docker-compose.yml中使用env_file:

env_file: -.env

在构建变速器时,这应该会自动从.env文件中设置Laravel所需的值。