设置
我在我的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
答案 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所需的值。