Docker Ubuntu 18.04 无法安装 msodbcsql17 SQL 服务器 ODBC 驱动程序 17

Docker Ubuntu 18.04 unable to install msodbcsql17 SQL Server ODBC Driver 17

我有下面的 ubuntu docker 文件,我想在其中添加 SQL Server ODBC Driver 17 以进行安装。当我构建 docker 文件时,出现错误: '/bin/sh -c apt-get install msodbcsql17' 返回非零代码:1

你能帮忙吗?

我指的是文章 - https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15

我在我的 Ubuntu VM 中按照文章中的步骤操作,它工作正常,我能够 运行 我的 python 程序。但是,当我使用 docker 文件时,出现错误

FROM ubuntu:18.04

RUN apt update -y  &&  apt upgrade -y && apt-get update 
RUN apt install -y curl python3.7 git python3-pip openjdk-8-jdk unixodbc-dev

RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN exit
#RUN ACCEPT_EULA=Y apt-get install msodbcsql17
RUN apt-get update
RUN ACCEPT_EULA=Y  
RUN apt-get install msodbcsql17
#RUN ACCEPT_EULA=Y apt install msodbcsql17
RUN ACCEPT_EULA=Y apt install mssql-tools
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc

COPY startup.sh /
RUN chmod +x /startup.sh
ENTRYPOINT ["sh","/startup.sh"]

我可以让它工作。下面是更新后的 Docker 文件片段

FROM ubuntu:18.04

RUN apt update -y  &&  apt upgrade -y && apt-get update 
RUN apt install -y curl python3.7 git python3-pip openjdk-8-jdk unixodbc-dev

# Add SQL Server ODBC Driver 17 for Ubuntu 18.04
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install -y --allow-unauthenticated msodbcsql17
RUN ACCEPT_EULA=Y apt-get install -y --allow-unauthenticated mssql-tools
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc

COPY startup.sh /
RUN chmod +x /startup.sh
ENTRYPOINT ["sh","/startup.sh"]

如果您使用的是 WSL2,则此错误可能是由于时钟问题不正确造成的。
打开 wsl2 和 运行

sudo hwclock --hctosys

参考时钟:https://www.thegeekstuff.com/2013/08/hwclock-examples/
wsl2 问题:https://github.com/microsoft/WSL/issues/5324

这可能会解决在 windows

中使用支持 docker 的 WSL2 时 apt-get 的问题

作为 Suraj 的补充

如果您将第一个语句替换为:

,他的回答适用于 Macbook M1
FROM --platform=linux/amd64 ubuntu:18.04