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

mel*_*ibi 4 ubuntu laravel docker

设置

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

问题

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

错误

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

lstat containers/.env: no such file or directory
Run Code Online (Sandbox Code Playgroud)

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

文件结构(Ubuntu)来源:

root/
  containers/
    - docker-compose
    - .env
Run Code Online (Sandbox Code Playgroud)

文件结构(docker容器)源到:

root/
  var/www/
Run Code Online (Sandbox Code Playgroud)

文件

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
Run Code Online (Sandbox Code Playgroud)

yah*_*ini 5

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

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

env_file: -.env

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


bar*_*mar 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 文件中更改它