Я работаю над настройкой сборки Docker, которая позволит мне подключаться к SQL Server из Linux. Насколько я знаю, это почти не имеет отношения к этому вопросу, но может, потому что я очень запутался!
Я основываю свой образ на Debian, так как Debian маленький и легкий. Я подозреваю, что мне не хватает некоторых языковых настроек, и это является причиной этого, но я не знаю.
Во всяком случае, вот моя команда + ошибка:
$ perl -MDBI -MData::Dumper -E'say Dumper(DBI->connect("dbi:ODBC:server=10.6.6.17;port=1433;database=Lynx;driver=ODBC Driver 11 for SQL Server;uid=sa;pwd=password")->selectall_arrayref("SELECT * FROM Setup"))'
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Для меня это похоже на ошибку C ++, которая может быть связана с драйвером ODBC SQL Server; это может быть C ++.
Я пытался:
export LC_ALL=C
export LC_ALL=C.UTF-8
export LC_ALL=en_US.UTF-8
export LC_ALL=en_US
export LC_ALL=POSIX
apt-get install locales
locale-gen
И не добились никакого прогресса. Любые идеи?
Приложение: ниже представлен мой настоящий Dockerfile; он, безусловно, неполный и может потребовать некоторой любви, но он может помочь вам воспроизвести эту ошибку (обратите внимание, что строку подключения в моей команде нужно будет настроить, чтобы в конечном итоге указывать на настоящий SQL Server, но не для воспроизведения этой проблемы).
FROM perl:5.20.1
RUN wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.2.tar.gz && \
tar xf unixODBC-2.3.2.tar.gz && \
cd /root/unixODBC-2.3.2 && \
./configure --disable-gui --disable-drivers --enable-stats=no --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE && \
make && \
make install && \
echo "include /usr/local/lib" >> /etc/ld.so.conf && \
ldconfig
RUN ln -s /usr/local/lib/libodbc.so.2 /usr/lib/libodbc.so.1 && \
ln -s /usr/local/lib/libodbccr.so.2 /usr/lib/libodbccr.so.1 && \
ln -s /usr/local/lib/libodbcinst.so.2 /usr/lib/libodbcinst.so.1 && \
ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/libssl.so.10 && \
ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /usr/lib/libcrypto.so.10
RUN wget http://download.microsoft.com/download/B/C/D/BCDD264C-7517-4B7D-8159-C99FC5535680/RedHat6/msodbcsql-11.0.2270.0.tar.gz && \
tar xf msodbcsql-11.0.2270.0.tar.gz && \
cd /root/msodbcsql-11.0.2270.0 && \
bash install.sh install --force --accept-license
RUN wget https://cpan.metacpan.org/authors/id/M/MJ/MJEVANS/DBD-ODBC-1.50.tar.gz && \
tar xf DBD-ODBC-1.50.tar.gz && \
cd /root/DBD-ODBC-1.50 && \
perl Makefile.PL -u && \
cpanm --installdeps . && \
make && \
make test && \
make install
Я понял!
Мне нужно было выполнить следующие шаги:
export DEBIAN_FRONTEND=noninteractive
apt-get install locales
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
locale-gen
а потом все остальное заработало!