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

问题描述 投票:0回答:3

设置

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

问题

Laravel 项目依赖于

.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容器)来源:

root/
  var/www/

docker文件

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
laravel ubuntu docker
3个回答
9
投票

简单地复制 .env 文件是行不通的,因为您还必须在该文件上运行

source
命令,然后运行
export
命令将每个环境变量添加到您的路径中。

既然您使用的是 docker-compose,那么您可以在 docker-compose.yml 中像这样使用 env_file:

env_file:
    -.env

当您构建容器时,这应该会自动从 .env 文件设置 Laravel 所需的值。


2
投票

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 文件中更改它


0
投票
docker run -d --network=your-network --restart unless-stopped --name your-container-name --env-file /host/path/to/.env your-container/name
© www.soinside.com 2019 - 2024. All rights reserved.