如何在docker-compose健康检查中使用环境变量?

3
我将尝试创建一个简单的健康检查用于 sql-server 容器,具体如下:
version: "3.8"

volumes:
    sql-server:

services:     
  sql-server:
      image: "mcr.microsoft.com/mssql/server:2017-latest"
      container_name: sql-server
      environment:
          - ACCEPT_EULA=Y
          - SA_PASSWORD=sa@@2020
      healthcheck:
          test: ["CMD", "/opt/mssql-tools/bin/sqlcmd", "-U", "sa", "-P", "$$SA_PASSWORD", "-Q", "SELECT 1"]
      ports:
          - "1433:1433"
      volumes: 
          - sql-server:/var/opt/mssql

然而我一直收到这个登录失败的消息:

用户“sa”的登录失败。原因:提供的登录密码与其不匹配。

如果我手动传递我的密码而不是使用环境变量,它就可以正常工作,但我个人不喜欢“重复”它的想法。

我也尝试了在这里建议使用 ${SA_PASSWORD}

但是结果还是一样。

我错过了什么?

1个回答

2

您没有一个shell来扩展变量,因此sqlcmd$$SA_PASSWORD作为字符串接收。

尝试使用类似以下命令的方式替换命令,以便具有从环境中扩展变量的shell。

 test: ["CMD", "sh", "-c", "/opt/mssql-tools/bin/sqlcmd -U sa -P $$SA_PASSWORD -Q SELECT 1"]

或者您可以尝试告诉docker-compose按以下方式扩展变量:
test: ["CMD", "/opt/mssql-tools/bin/sqlcmd", "-U", "sa", "-P ${self:services.mysql.environment.SA_PASSWORD}", "-Q", "SELECT 1"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接