Я бы хотел запустить SQL Сервер в docker контейнере. Из того, что я гуглил, это должно работать:
docker run --name sqlserver -p 1433:1433 -e ACCEPT_EULA=Y -e SA_PASSWORD=strong@Password123 -d --rm microsoft/mssql-server-linux:2017-latest tail -f /dev/null
При запуске таким образом, docker раскручивает контейнер, и все выглядит хорошо, но это не так! Когда я пытаюсь подключиться к нему, я получаю ошибки. Подключение через bash:
sudo docker exec -it sqlserver "bash"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "strong@Password123"
дает следующие ошибки:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2749.
Я почти уверен, что это потому, что сервер базы данных на самом деле не работает.
Мой второй тест включал раскрутку сервера с использованием docker -compose. Содержимое файла составления:
version: "3.2"
services:
sqlserver:
container_name: sqlserver
image: microsoft/mssql-server-linux:2017-latest
ports:
- "1433:1433"
environment:
SA_PASSWORD: "strong@Password123"
ACCEPT_EULA: "Y"
, затем:
docker-compose up -d
При таком запуске я могу запустить c в контейнер OK и нажать приглашение SQL. Успех! Однако я предпочитаю запускать сервер / контейнер, используя одну строку, так как это шаг в сборке Jenkins, и я не хочу, чтобы это становилось слишком сложным.
Может кто-нибудь объяснить, что здесь происходит и / или указать мне в правильном направлении? Почему docker-compose
работает, а run
нет?