#sql-server #linux #docker #docker-compose #ubuntu-21.04
Вопрос:
У меня возникли трудности с сервером MSSQL в Docker. Я создал файл compose, и все начинается нормально, но всякий раз, когда я пытаюсь войти в систему, это не удается. Он не будет подключаться локально с помощью команды docker exec:
sudo docker exec -it <container_id> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa
Password:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'sa'..
И он также не может подключиться с моего удаленного компьютера через DBeaver, используя те же учетные данные:
2021-10-20 16:13:48.22 Logon Error: 18456, Severity: 14, State: 7.
2021-10-20 16:13:48.22 Logon Login failed for user 'sa'. Reason: An error occurred while evaluating the password. [CLIENT: 192.168.1.150]
Вот мой файл docker-compose:
services:
mssql:
image: mcr.microsoft.com/mssql/server:2017-latest
container_name: mssql
restart: always
environment:
- "SА_PASSWORD=Lmnt!1991"
- "ACCEPT_EULA=Y"
- "TZ=Europe/Belgrade"
ports:
- "1433:1433"
volumes:
- "./data:/var/opt/mssql"
deploy:
resources:
limits:
memory: 4096M
networks:
default:
networks:
default:
name: pyramid
driver: bridge
ipam:
config:
-
subnet: 172.9.9.0/24
gateway: 172.9.9.1
Комментарии:
1. Похоже, у вас нет проблем с самим докером или подключением к сети. Сосредоточьте свой поиск на пароле. Вы указали правильную переменную? Действительно ли установлен пароль, как вы его определили?
2. @HiranChaudhuri Да, в официальной документации переменная пароля — «SA_PASSWORD». Я также обнаружил, что это может быть «MSSQL_SA_PASSWORD», но это тоже не работает.
3. Просто чтобы убедиться, что это не значение пароля: попробуйте использовать примитивный пароль без специальных символов. Я нашел некоторых персонажей, таких как%, удивительно проблематичными. И эта проблема может возникнуть на стороне сервера и клиента…
4. @HiranChaudhuri Они не будут работать, так как, к сожалению, они не соответствуют требованиям к паролям для этой версии MSSQL.
Ответ №1:
Здесь речь идет о двух проблемах:
- Неправильные переменные среды
- Небезопасные символы пароля
Если вы посмотрите журналы контейнеров Docker, вы увидите полезную информацию, такую как:
2021-10-20 23:37:51.74 Logon Error: 18456, Severity: 14, State: 7.
2021-10-20 23:37:51.74 Logon Login failed for user 'sa'. Reason: An error occurred while evaluating the password. [CLIENT: 172.9.9.2]
Согласно MSSQLSERVER_18456 Состояние 7 означает:
7 Вход в систему отключен, а пароль неверен.
Это происходит потому, что вы указываете переменную среды SA_PASSWORD
, а MSSQL_SA_PASSWORD
не в своем docker-compose.файл yaml. В качестве первого шага остановите и удалите контейнер (также удалите ./data
папку) и отредактируйте YAML следующим образом:
environment:
- "MSSQL_SA_PASSWORD=Lmnt!1991"
- "ACCEPT_EULA=Y"
- "TZ=Europe/Belgrade"
Теперь, когда вы войдете в систему, вместо этого вы увидите другую ошибку входа:
2021-10-20 23:42:26.11 Logon Error: 18456, Severity: 14, State: 8.
2021-10-20 23:42:26.11 Logon Login failed for user 'sa'. Reason: Password did not match that for the login provided. [CLIENT: 172.9.9.2]
Похоже, это происходит потому !
, что это специальный символ оболочки. Остановите и удалите контейнер (также удалите ./data
папку) и отредактируйте YAML следующим образом:
environment:
- "MSSQL_SA_PASSWORD=Lmnt@1991"
- "ACCEPT_EULA=Y"
- "TZ=Europe/Belgrade"
Теперь, когда вы войдете в систему , используя @
символ вместо !
, вы успешно подключитесь.
ОБРАТИТЕ ВНИМАНИЕ: вам нужно удалить ./data
папку между попытками, потому что установка пароля sa происходит только при первом запуске контейнера. Перенастройка докера-составление.файл yaml и простое удаление/увеличение контейнера не приведет к сбросу учетных данных sa, предыдущая конфигурация будет сохранена в ./data
папке.
Комментарии:
1. Вы сами пробовали это сделать? Я перепробовал все, что вы сказали, и по какой-то причине все еще получаю ту же ошибку…
2. Да, я это сделал. Хорошо обратите внимание на ЗАПИСКУ . Я не изучал более подробно, где
sa
хранятся учетные данные — я думаю, что этоmsdb
так, — но, поскольку вы сейчас просто экспериментируете, должно быть безопасно удалить все в./data
папке.