Чтобы получить литерал $, используйте $$.
docker-compose run sqlcmd sqlcmd -S sqlserver -U "$$SQL_HOST" -P "$$SQL_PASSWORD"
Если SQL_HOST и SQL_PASSWORD являются переменными, определенными ранее в вашем Makefile (вместо переменных окружения), вы должны написать это так:
SQL_HOST=localhost
SQL_PASSWORD=hunter2
sqlcmd:
docker-compose run sqlcmd sqlcmd -S sqlserver -U "$(SQL_HOST)" -P "$(SQL_PASSWORD)"
PS: Добро пожаловать на сайт.
РЕДАКТИРОВАТЬ : Чтобы отложить расширение переменных до тех пор, пока контейнер не запустится, вам нужно запретить расширению их оболочкой. Если переменная заключена в одинарные кавычки, оболочка не будет пытаться ее развернуть.
Вот пример:
docker-compose run sqlcmd sqlcmd -S sqlserver -U '"$$SQL_HOST"' -P '"$$SQL_PASSWORD"'
РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ : Полагаю, вам это тоже нужно, чтобы Docker использовал оболочку для расширения переменных:
docker-compose run sqlcmd sh -c 'sqlcmd -S sqlserver -U "$$SQL_HOST" -P "$$SQL_PASSWORD"'