RUN используется для построения слоев в изображении. CMD - это команда, запускаемая при запуске экземпляра образа («контейнера»)
Кроме того, если ваш скрипт зависит от этих переменных среды, если это более старая версия Docker, он может завершиться ошибкой, поскольку эти переменные не определены так, как вы хотите, чтобы они были определены!
В старых версиях docker команда ENV Dockerfile использует пробелы вместо "="
Ваш Dockerfile, вероятно, должен быть:
FROM microsoft/mssql-server-windows-express
COPY ./create-db.sql .
ENV ACCEPT_EULA Y
ENV sa_password ##$wo0RD!
RUN sqlcmd -i create-db.sql
Это создаст изображения, содержащие базу данных с вашим паролем внутри.
(Если файл SQL каким-либо образом использует переменные среды, это не имеет смысла, так как вы можете также обновить файл SQL, прежде чем скопировать его.) Если вы хотите иметь возможность переопределить пароль между сборкой докера и шаги запуска docker. Используя docker run --env sa_password=##$wo0RD! ...
, вам нужно изменить последнюю строку на:
CMD sqlcmd -i create-db.sql && .\start -sa_password $env:sa_password \
-ACCEPT_EULA $env:ACCEPT_EULA -attach_dbs \"$env:attach_dbs\" -Verbose
Который является модифицированной версией строки CMD, которая унаследована от восходящего образа