Как я могу установить сервер MSSQL в образе Python Docker?

#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.