【问题标题】:How can I install MSSQL Server in a Python Docker image?如何在 Python Docker 映像中安装 MSSQL Server?
【发布时间】:2023-03-17 19:50:01
【问题描述】:

我想在 Python docker 容器中安装 MSSQL Server,以便能够在 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 - \
    && apt-get update \
    && 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

【问题讨论】:

  • 鉴于所有 MS 示例都使用 MSSQL_PID='Developer' 和大写 D,您是否尝试过使用 Developer 和大写 D
  • 我怀疑 SQL Server Developer 映像已经包含 Python - 毕竟,Python 集成是一个主要的 ML 功能。与其尝试将 SQL Server 添加到 Python 映像,为什么不尝试将丢失的包添加到 SQL Server 映像?
  • "为什么不尝试将丢失的包添加到 SQL Server 映像中" - 我做到了,见上文。 mcr.microsoft.com/mssql/server:2019-latest 实际上包含 Python,但 Python 2.7

标签: python sql-server linux docker


【解决方案1】:

第二个例子应该是:

FROM mcr.microsoft.com/mssql/server:2019-latest
USER root
RUN apt-get update && \
    # install python

USER mssql

Microsoft 没有在任何地方记录它,但此图像包含两个用户,并将无特权用户 mssql 设置为默认用户。

【讨论】:

  • 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
  • 或者你可以做我通常做的事情,用 Dive 或 Portainer 之类的东西检查图像的图层。
猜你喜欢
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2018-05-31
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多