Docker compose vs run с SQL Серверный контейнер - PullRequest
0 голосов
/ 18 марта 2020

Я бы хотел запустить 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 нет?

1 Ответ

0 голосов
/ 19 марта 2020

Ладно .. Я решил это. Требования к паролю sql server SA, определенные Microsoft, заключаются в том, что пароль содержит символы из трех следующих четырех категорий:

  • латинские заглавные буквы (от A до Z) * ​​1004 *
  • латинские строчные буквы буквы (от a до z)
  • базовые 10 цифр (от 0 до 9)
  • не алфавитные числа c символы, такие как: восклицательный знак (!), знак доллара ($), знак числа (#) или процент (%).

Хотя мой исходный пароль соответствует этим требованиям, оказывается, что этого на самом деле недостаточно. Когда я использовал следующий пароль SecretP@55w0rd вместо оригинала, команда docker run поддерживает работу сервера. Спасибо Microsoft за использование недокументированной функции сложности пароля!

По какой-то причине, когда вы запускаете сервер, используя docker compose, это требование пароля не такое строгое.

...