#sql-server #docker
#sql-сервер #docker
Вопрос:
Я пытаюсь запустить SQL Server Express в контейнере Docker.
Когда я запускаю docker container run -d -P my-db:v1
его, он немедленно останавливается.
Файл Docker:
# escape=`
FROM microsoft/mssql-server-windows-express
ENV ACCEPT_EULA="Y" `
DATA_PATH="C:data" `
sa_password="mypw"
VOLUME ${DATA_PATH}
WORKDIR C:folder1
Когда я удаляю WORKDIR
строку в конце, контейнер продолжает работать.
При включении WORKDIR
строки и запуске контейнера на рабочем столе Docker отображается:
.start : The term '.start' is not recognized as the name of a cmdlet,
function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At line:1 char:76
... e = 'Stop'; $ProgressPreference = 'SilentlyContinue'; .start -sa_pas ...
~~~~~~~
CategoryInfo : ObjectNotFound: (.start:String) [], ParentConta
insErrorRecordException
FullyQualifiedErrorId : CommandNotFoundException
Когда я проверяю контейнер, он показывает команду запуска, которая выглядит нормально:
"Path": "powershell",
"Args": [
"-Command",
"$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';",
".\start -sa_password $env:sa_password -ACCEPT_EULA $env:ACCEPT_EULA -attach_dbs \"$env:attach_dbs\" -Verbose"
]
Ответ №1:
CMD .start
требуется start.ps1
, чтобы скрипт находился в WORKDIR
каталоге. Исходное изображение WORKDIR
установлено в корневой каталог (C:), и сценарий находится в этом каталоге (C:Start.ps1 ).
Теперь, когда вы изменили WORKDIR
на C:folder1 ), вам нужно либо указать новый CMD в файле docker, либо переопределить значение во время выполнения. Пример файла Dockerfile:
CMD C:start.ps1 -sa_password $env:sa_password -attach_dbs "$env:attach_dbs" -Verbose