.production中的环境文件.当运行"docker compose——Env -file ./produ



我想做什么

我尝试在docker上使用命令构建我的项目:docker compose --env-file ./production.env up --build。我想在Dockerfile之外的单独文件中定义环境变量。我使用了——env-file标志(https://docs.docker.com/compose/environment-variables/set-environment-variables/#substitute-with---env-file)。

执行完命令后,Docker没有报错,成功创建了容器。但是,我的项目检测到环境变量缺失并退出。

<标题>

我的设置我正在运行一个节点项目。文件结构是

  • docker-compose.yml
  • Dockerfile
  • production.env
  • …其他文件(src文件夹等)
  • 我Dockerfile

FROM node:16-alpine as development
WORKDIR /usr/src/app
COPY package*.json .
RUN npm install
COPY . .
RUN npm run build
FROM node:16-alpine as production
WORKDIR /usr/src/app
COPY package*.json .
RUN npm ci --only=production
COPY --from=development /usr/src/app/dist ./dist
CMD ["node", "dist/index.js"]

我docker-compose.yml:


version: "3.4"
services:
api:
build:
context: .
target: production
ports:
- 8888:8888

我的节点项目需要运行环境变量,如果没有检测到所有环境变量,将抛出和异常。这些羡慕对象存储在生产环境中。Env文件和一个示例说明我是如何制作的。Env文件看起来:

DB_URI=https://urihere.net
PASSWORD_KEY=somepw

您实际上并没有将环境变量传递给容器。

一个选项是使用Composeenv_file:将整个环境变量文件传递给容器;在这种情况下,您不需要docker-compose --env-file选项。

services:
api:
env_file:
- production.env
docker-compose up --build -d  # no --env-file

第二种方法是保留--env-file选项,但使用environment:选项将每个值传递给容器。

services:
api:
environment:
- DB_URI        # without an `=value` part
- PASSWORD_KEY
docker-compose --env-file production.env up -d --build

Compose有两层环境变量。一般的Unix环境、.env文件和任何--env-file文件用于创建一组变量,这些变量可用于docker-compose.yml文件中的变量替换。然而,这些不会自动传递到单个容器的环境;只使用environment:env_file:内容(扩展和覆盖图像的ENV行)。

相关内容

  • 没有找到相关文章

最新更新