docker - 在我的docker-compose文件中,如何在不对字符串进行两次硬编码的情况下将两个env var设置为同一对象?

标签 docker docker-compose environment-variables

我正在尝试构建一个Docker容器,其中将两个环境变量设置为同一对象。我有

version: "3.2"
services:

  sql-server-db:
    image: mcr.microsoft.com/mssql/server:latest
    ports:
      - 3900:1433
    env_file: ./tests/.test_env
    ...
    command: /bin/bash /my-app/my-script.sh
然后在我的tests / .test_env文件中
MY_DB_PASSWORD=reallylongpassword
SA_PASSWORD=${MY_DB_PASSWORD}
我想将“MY_DB_PASSWORD”和“SA_PASSWORD”环境变量设置为相同的内容,但是,上述操作没有完成,因为“SA_PASSWORD”似乎设置为文字字符串“$ {MY_DB_PASSWORD}”。如何在不对“reallylongpassword”字符串进行两次硬编码的情况下将两个变量设置为相同的内容?

最佳答案

使用env文件是不可能的,只需在脚本like this中执行即可。这种方式更加灵活,因为如果没有设置,它将采用值。

SA_PASSWORD="${SA_PASSWORD:-$MY_DB_PASSWORD}"
如果您担心密码安全性,则应使用docker secret,但需要在Swarm模式下运行。
这是image使用的dockerfile。您可以定义自己的CMD来覆盖行为并采用env或使用技巧来采用默认值。
CMD .\start -sa_password $env:sa_password -ACCEPT_EULA $env:ACCEPT_EULA -attach_dbs \"$env:attach_dbs\" -Verbose

//using you MY_DB_PASSWORD instead of SA_PASSWORD
CMD .\start -sa_password $env:my_db_password -ACCEPT_EULA $env:ACCEPT_EULA -attach_dbs \"$env:attach_dbs\" -Verbose

关于docker - 在我的docker-compose文件中,如何在不对字符串进行两次硬编码的情况下将两个env var设置为同一对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63563639/

相关文章:

由多个存储库组成的 Docker 应用程序的 Git 存储库设置

networking - 在 Mac 上 Docker-compose extra_hosts

networking - Kubernetes pod 无法访问自己的服务

jenkins - 使用 Cloudbees Docker 构建和发布插件时从 Jenkins 奴隶构建后删除图像

angularjs - 更改我的项目文件不会更改 Docker 机器内的文件

linux - cmake:如何在外部项目中正确设置变量以先于 make?

linux - 提高命令行参数字符串/大小限制 (ARG_MAX) Mac OSX

postgresql - 如何在 Postgres Docker 容器中创建数据库?

python - 在 Docker 中运行 python cronjob 时缺少环境变量

java - ProcessBuilder 不会触发