docker - 动态地将参数传入 `docker-compose.yml`

标签 docker docker-compose environment-variables

我可以在 docker-compose.yml 中指定一个参数,如下所示(例如 RAILS_ENV)

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: production

Dockerfile 使用此 ARG 并设置ENV,以便使用该环境变量构建我的镜像:

FROM ruby:2.5.1

# ...

ARG RAILS_ENV
ENV RAILS_ENV=$RAILS_ENV

# ...
# Image contains environment variable `$RAILS_ENV` as `"production"`

但是,如果我想使用 "products" 的硬编码值以外的值怎么办?

  1. 有没有办法将变量动态传递到 docker-compose.yml 文件中?

  2. 此外,如果我不传递任何内容,我可以在 docker-compose.yml 中指定默认值(例如 development)吗?

谢谢!

最佳答案

是的,你可以做到这一点。

首先,您需要使用变量创建 .env(与您的 Dockerfile 位于同一位置):

RAILS_ENV=production

您没有将此文件提交到存储库(您应该将其添加到 .gitignore)。 然后你就可以开始在Dockerfile中使用它们:

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: ${RAILS_ENV}

有两种方法可以定义变量的默认值:

${VARIABLE:-default} evaluates to default if VARIABLE is unset or empty in the environment. ${VARIABLE-default} evaluates to default only if VARIABLE is unset in the environment.

例如:

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: ${RAILS_ENV:-development}

在此处了解更多信息:https://docs.docker.com/compose/compose-file/#variable-substitution

关于docker - 动态地将参数传入 `docker-compose.yml`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58329477/

相关文章:

docker - 使用 Dockerfile 构建 docker 镜像时无法更改目录

java - Docker-compose:/app.war 中没有主要 list 属性

docker - 在 docker hub 上共享多容器应用程序的最简单方法是什么?

windows - 适用于所有 Windows 版本的所有用户桌面路径的环境变量是什么?

docker - 我可以运行 Docker 镜像的中间层吗?

docker - Kubernetes:如何管理大量服务?将多个应用程序组合到一项服务中是一个坏主意吗?

docker - 使用Nginx和Dockerize flask应用程序进行Python应用程序部署

docker - Docker 中的 Kong : Configuring API endpoints without curl

node.js - PM2 无法获取 ~/.profile 文件中设置的更新值

java - 从 python 脚本设置环境变量