簡體   English   中英

無法從Docker中的elixir / phoenix連接到SQL Server

[英]Can't connect to SQL Server from elixir/phoenix in Docker

我正在嘗試將“ Phoenix(Elixir)-Application”(打包為Docker-Container)連接到microsoft/mssql-server-linux:latest Docker-Container

因此,我使用https://hex.pm/packages/mssql_ecto作為適配器

use Mix.Config

config :my_api, MyApi.Repo,
adapter: MssqlEcto,
database: "dev",
username: "sa",
password: "my_api_password",
hostname: "127.0.0.1",
#odbc_driver: "{SQL Server Native Client 11.0}",
#odbc_driver: "{ODBC Driver 11 for SQL Server}",
#odbc_driver: "{ODBC Driver 13.1 for SQL Server}",
#odbc_driver: "{ODBC Driver 13 for SQL Server}",    # <- Default
#port: "1433" # <- Default

我當前在Docker中運行phoenix-Application的Dockerfile:

FROM elixir:1.5.2

# install ODBC driver
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y curl apt-transport-https debconf-utils apt-utils
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update -y && ACCEPT_EULA=Y apt-get install -y msodbcsql && ACCEPT_EULA=Y apt-get install -y mssql-tools && apt-get install -y unixodbc-dev
RUN apt-get install -y erlang-odbc

我猜問題出在我的Dockerfile中,尤其是用於安裝ODBC驅動程序的行。 當您查看我的Mix.Config時,您會發現我嘗試了許多“ odbc驅動程序”字符串的組合-並不是其中的一種。

繼承人鳳凰的輸出:

** (Mix) The database for MyApi.Repo couldn't be created: %Mssqlex.Error{constraint_violations: [], message: "[unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0' : file not found Connection to database failed. | ODBC_CODE 01000 | SQL_SERVER_CODE 0", odbc_code: "01000"}

是否有人可以使用Elixir(docker-image)運行並可以連接到“ microsoft / mssql-server-linux:latest Docker-Container”?

我非常感謝您的幫助!

順便說一句...我無法通過HeidiSQL和Microsoft SQL Server Management Studio 17從主機連接到“ mssql-server-linux容器”,因此“ mssql-server-linux容器”完全沒有問題。

設定:

  • 主機操作系統:Windows 10 Pro
  • 適用於Windows的Docker:17.12.0-ce-win47

對於所有為此苦苦掙扎的人:這是我的適用於Ubuntu 16的Dockerfile的相關內容:

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install apt-utils apt-transport-https wget
RUN echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/mssql-ubuntu-xenial-release/ xenial main" > /etc/apt/sources.list.d/mssqlpreview.list
RUN apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
RUN apt-get -y update
RUN env ACCEPT_EULA=Y DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
    build-essential \
    cpanminus \
    msodbcsql \
    unixodbc-dev-utf16
RUN apt-get install unixodbc-dev-utf16
RUN cd /root && \
    wget https://cpan.metacpan.org/authors/id/M/MJ/MJEVANS/DBD-ODBC-1.56.tar.gz && \
    tar xf DBD-ODBC-1.56.tar.gz && \
    cd /root/DBD-ODBC-1.56      && \
    perl Makefile.PL -u         && \
    cpanm --installdeps .       && \
    make                        && \
    make test                   && \
    make install                && \
    rm -rf /root/DBD-ODBC-1.56.tar.gz /root/DBD-ODBC-1.56

# Set locale
RUN apt-get install -y locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

最后一行對於ODBC驅動程序正常工作很重要。

odbc_driver: "{ODBC Driver 13 for SQL Server}

為工作的MssqlEcto配置!

@Nolan:當我將它與Ubuntu一起使用時,我感到非常高興,我立即切換到Debian(elixir 1.6)-它可以工作。 但是您必須更改一些部分。 這是我為elixir.1.6(debian)工作的Dockerfile-如果它與1.6.1兼容,請允許我

順便說一句:當錯誤的語言環境配置時,odbc驅動程序非常討厭;)

FROM elixir:1.6
ENV REFRESHED_AT 29-01-2018


# install odbc driver
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install apt-utils apt-transport-https wget
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN env ACCEPT_EULA=Y DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
     build-essential \
     cpanminus \
     msodbcsql \
     unixodbc-dev
RUN apt-get install unixodbc-dev
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql
RUN ACCEPT_EULA=Y apt-get install -y mssql-tools
RUN cd /root && \
    wget https://cpan.metacpan.org/authors/id/M/MJ/MJEVANS/DBD-ODBC-1.56.tar.gz && \
    tar xf DBD-ODBC-1.56.tar.gz && \
    cd /root/DBD-ODBC-1.56      && \
    perl Makefile.PL -u         && \
    cpanm --installdeps .       && \
    make                        && \
    make test                   && \
    make install                && \
    rm -rf /root/DBD-ODBC-1.56.tar.gz /root/DBD-ODBC-1.56

# set locale configuration
RUN apt-get install -y locales
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
    dpkg-reconfigure --frontend=noninteractive locales && \
    update-locale LANG=en_US.UTF-8
ENV LANG en_US.UTF-8

# install hex
RUN mix local.hex --force

# install rebar
RUN mix local.rebar --force

# install phoenix
RUN mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez --force

# install node
RUN curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
RUN bash nodesource_setup.sh
RUN apt-get install nodejs

IDK(如果已准備好生產)(在安全性和優化方面)-當您獲得優化版本時,請告訴我! 干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM