#python #sql-server #linux #docker
#python #sql-сервер #linux #docker
Вопрос:
Я хочу установить сервер MSSQL в контейнер Python docker, чтобы иметь возможность запускать модульные тесты в конвейере CI.
Проблема в том, что установка продолжает завершаться сбоем. Как я могу это исправить?
Что я пробовал
FROM python:3.7.9-slim-buster
RUN apt-get update
RUN apt-get -y install gnupg curl software-properties-common wget
RUN add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/18.04/mssql-server-2019.list)"
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
amp;amp; apt-get update
amp;amp; ACCEPT_EULA=Y DEBIAN_FRONTEND=noninteractive apt-get install -y
unixodbc-dev
mssql-server
ENV MSSQL_PID 'developer'
ENV MSSQL_SA_PASSWORD 'Devel0per'
RUN /opt/mssql/bin/mssql-conf -n setup accept-eula
ENV SQLALCHEMY_DATABASE_URI mssql pyodbc://dev_user:Devel0per@localhost:5432/dev_db
Это дает:
Step 8/9 : RUN /opt/mssql/bin/mssql-conf -n setup accept-eula
---> Running in f3cebdb5b946
Traceback (most recent call last):
File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 361, in <module>
main()
File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 357, in main
processCommands()
File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 262, in processCommands
COMMAND_TABLE[args.which]()
File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 58, in handleSetup
exit(mssqlconfhelper.setupSqlServer(True, noprompt=args.noprompt))
File "/opt/mssql/lib/mssql-conf/mssqlconfhelper.py", line 971, in setupSqlServer
if not checkInstall():
File "/opt/mssql/lib/mssql-conf/mssqlconfhelper.py", line 941, in checkInstall
return runScript(checkInstallScript, True) == 0
File "/opt/mssql/lib/mssql-conf/mssqlconfhelper.py", line 930, in runScript
return subprocess.call([sudo, "-EH", pathToScript])
File "/usr/lib/python2.7/subprocess.py", line 172, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Попробуйте 2
FROM mcr.microsoft.com/mssql/server:2019-latest
RUN apt-get update
дает
Step 2/2 : RUN apt-get update
---> Running in a1f0ef2cdd3f
Reading package lists...
E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
The command '/bin/sh -c apt-get update' returned a non-zero code: 100
Комментарии:
1. Учитывая, что все примеры MS используются
MSSQL_PID='Developer'
с большой буквыD
, вы пробовали использоватьDeveloper
с большой буквыD
?2. Я подозреваю, что образ разработчика SQL Server уже содержит Python — в конце концов, интеграция с Python является основной функцией ML. Вместо того, чтобы пытаться добавить SQL Server в образ Python, почему бы не попробовать добавить недостающие пакеты в образ SQL Server?
3. «почему бы не попробовать добавить недостающие пакеты в образ SQL Server» — я сделал, см. Выше. на самом
mcr.microsoft.com/mssql/server:2019-latest
деле содержит Python, но Python 2.7
Ответ №1:
Второй пример должен быть:
FROM mcr.microsoft.com/mssql/server:2019-latest
USER root
RUN apt-get update amp;amp;
# install python
USER mssql
Microsoft нигде не документирует это, но этот образ содержит двух пользователей и устанавливает непривилегированного пользователя mssql
в качестве пользователя по умолчанию.
Комментарии:
1. fwiw вы можете найти эту информацию при проверке образов:
docker inspect mcr.microsoft.com/mssql/server:2019-latest --format {{.Config.User}}
или при запуске контейнера, т.е.:docker run --rm -i --entrypoint id mcr.microsoft.com/mssql/server:2019-latest
2. Или вы можете сделать то, что я обычно делаю, и проверить слои изображения с помощью чего-то вроде Dive или Portainer.