首先,我想在webpack.config.prod.js上使用我的application .env变量,所以我在webpack文件中这样做了。
我能够成功访问process.env.BUILD变量。
我的应用程序的env具有以下配置-
我的nodejs web应用程序在本地运行良好,没有任何问题。我想建立这个应用程序的docker映像,需要使用docker-compose来创建容器。
我建立了我的 Docker 形象和一切都好到目前为止。
现在创建容器,而不是docker运行。我正在使用单独的文件夹,其中包括docker-compose.yml和.env文件。下面附上截图
x1c4d 1x指令集
我的docker-compose.yml有这样的代码-
version: '3.9'
services:
api:
image: 'api:latest'
ports:
- '17000:17000'
env_file:
- .env
volumes:
- ./logs:/app/logs
networks:
- default
我的docker-compose .env文件中有这个redis的详细信息
我的应用程序有这些日志-
指令集
我通过执行docker-compose up来启动我的docker容器。容器被创建并启动和运行,但问题是
在控制台中,连接到redis.. process.env后,REDIS_HOST包含名为“localhost”的值(它来自我用来构建Docker映像的第一个env)。Docker compose .env没有被访问。
在花了5个多小时后。我找到了罪魁祸首,它是webpack。在我的初始代码中,我在webpack中添加了一些env相关的东西,对吗?一旦我评论了这些,就进行了一个新的构建。一切都很好。
但我的问题是我如何在webpack中实际使用process.ENV,而且docker-compose需要使用其目录中的.env。
已更新-
我的DockerFile看起来像这样:
只是,它将复制包含bundle.js的dist,npm启动将执行- pm2运行bundle.js。
1条答案
按热度按时间6l7fqoea1#
据我所知,webpack是在构建时而不是运行时获取.env的,这意味着它在构建映像时需要环境变量。
你在docker-compose.yml中传递的那个变量没有被使用,因为那时你的应用程序已经被构建了。对吗?为了使用你的.env,你应该用docker-compose. yml构建图像,并把env变量作为构建参数传递给你的Dockerfile。
为了使用docker-compose.yml构建映像,您应该执行以下操作:
注意:上面的
context
指向当前文件夹。您可以将其更改为指向您的Dockerfile(以及项目的其余部分)所在的文件夹,或者您可以直接将您的docker-compose.yml与项目的其余部分放在一起,这样context
就保持为.
。在您的
Dockerfile
中,您需要指定以下参数:通过这些更改,您可以使用docker-compose进行构建和运行: