контейнер mssql-server-windows-express Docker немедленно останавливается

#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