docker - 如何在 docker-compose healthchecks 上使用环境变量?

标签 docker docker-compose

我正在尝试为 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

但我一直收到此登录失败消息:

Login failed for user 'sa'. Reason: Password did not match that for the login provided.

如果我手动传递我的密码而不是使用环境变量,它工作得很好,但我个人不喜欢必须“重复”它的想法。

我还尝试按照建议使用 ${SA_PASSWORD} here .

这让我得到了相同的结果。

我在这里错过了什么?

最佳答案

您没有用于扩展变量的 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"]

关于docker - 如何在 docker-compose healthchecks 上使用环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66607571/

相关文章:

Docker Swarm 服务 - 将服务模式从副本更改为全局,无需重新创建 docker 服务

docker - Docker中的动态更改Traefik前端配置

Node.js + Docker 组合 : node_modules disappears

mongodb - 如何通过docker-compose在docker上创建用户并登录mongodb数据库?

docker - Docker启动后撰写run shell命令

docker - 我可以为docker swarm容器分配核心吗?

windows - 在 windows docker 容器容器上安装 Print-Server 失败

docker - 如何在本地访问 nginx 入口?

docker - docker-compose的背景/前景

docker-compose.yml + ssh-server 不工作