LoginSignup
7
6

More than 5 years have passed since last update.

SQLCMDをDockerで動かす

Last updated at Posted at 2016-11-21

概要

20170412追記

公式のsqlserverのDockerイメージにtoolsも含まれるようになっている、とコメントで教えていただきました。
https://github.com/Microsoft/mssql-docker/issues/8
本体はいらない、簡易に確認するsqlcmdとかbcpが入った軽量なのを作ろうという趣で読むと良いと思います。

追加終わり.

SQLServerをLinux Dockerで動かしてみるに引き続き、sqlcmdコマンドを発行できるコンテナの作成に挑みます。

Install SQL Server tools on Linuxの内容に従って、mssql-toolsを動かせるコンテナを作成します。

注意:インストーラの中でライセンスの確認部分があるので、Dockerのイメージの配布は行わず、Dockerfileの中身を書きます

Dockerfile

FROM centos:latest
MAINTAINER tsgkadot <tsgkadot@gmail.com>

ENV ACCEPT_EULA=Y 

RUN \
    curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo && \
    yum install -y mssql-tools && \
    yum clean all

yumレポジトリに追加し、yum install -y mssql-toolsとするだけです。

参考情報

環境変数 ACCEPT_EULAにYを指定します。
もし、この部分がなければ、docker build時に次のようなログが出力され、ビルドに失敗します。

ENV ACCEPT_EULA=Y

ログの例

Running transaction
  Installing : e2fsprogs-libs-1.42.9-7.el7.x86_64                           1/8 
  Installing : e2fsprogs-1.42.9-7.el7.x86_64                                2/8 
  Installing : 1:make-3.82-21.el7.x86_64                                    3/8 
  Installing : 1:openssl-1.0.1e-51.el7_2.7.x86_64                           4/8 
  Installing : libtool-ltdl-2.4.2-21.el7_2.x86_64                           5/8 
  Installing : unixODBC-utf16-2.3.1-1.x86_64                                6/8 
/var/tmp/rpm-tmp.4DJM99: line 17: /dev/tty: No such device or address
error: %pre(msodbcsql-13.0.1.0-1.x86_64) scriptlet failed, exit status 1
Error in PREIN scriptlet in rpm package msodbcsql-13.0.1.0-1.x86_64
error: msodbcsql-13.0.1.0-1.x86_64: install failed
/var/tmp/rpm-tmp.tZ9Ckv: line 4: /dev/tty: No such device or address
error: %pre(mssql-tools-14.0.1.246-1.x86_64) scriptlet failed, exit status 1
Error in PREIN scriptlet in rpm package mssql-tools-14.0.1.246-1.x86_64
  Verifying  : libtool-ltdl-2.4.2-21.el7_2.x86_64                           1/8 
  Verifying  : 1:make-3.82-21.el7.x86_64                                    2/8 
  Verifying  : unixODBC-utf16-2.3.1-1.x86_64                                3/8 
  Verifying  : e2fsprogs-1.42.9-7.el7.x86_64                                4/8 
  Verifying  : 1:openssl-1.0.1e-51.el7_2.7.x86_64                           5/8 
  Verifying  : e2fsprogs-libs-1.42.9-7.el7.x86_64                           6/8 
  Verifying  : msodbcsql-13.0.1.0-1.x86_64                                  7/8 
  Verifying  : mssql-tools-14.0.1.246-1.x86_64                              8/8 

Dependency Installed:
  e2fsprogs.x86_64 0:1.42.9-7.el7        e2fsprogs-libs.x86_64 0:1.42.9-7.el7  
  libtool-ltdl.x86_64 0:2.4.2-21.el7_2   make.x86_64 1:3.82-21.el7             
  openssl.x86_64 1:1.0.1e-51.el7_2.7     unixODBC-utf16.x86_64 0:2.3.1-1       

Failed:
  msodbcsql.x86_64 0:13.0.1.0-1        mssql-tools.x86_64 0:14.0.1.246-1       

Complete!
The command '/bin/sh -c curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo &&     yum install -y mssql-tools' returned a non-zero code: 1

まっさらな環境に、mssql-toolsをインストールする際には、実際は2回、ライセンス条項を確認してYESを入力する必要があります。

  • msodbcsqlインストール時
  • mssql-toolsインストール時

Linux に SQL Server 用 Microsoft ODBC Driver をインストールするによると、サイレントインストールにはACCEPT_EULA=yを使え、とあります。

#for silent install use ACCEPT_EULA=Y yum install msodbcsql

ACCEPT_EULAを使わずYESコマンドで逃げようとしてもダメでした。

使用例

SQLServerをLinux Dockerで動かしてみるで立てたSQLServerに接続して、Select文を発行してみます。

docker run --rm -it ビルドしたイメージ sqlcmd -S 192.168.144.xx -U sa -P P@55w0rd
1> 
2> 
3> use DevBBS
4> select count(*) from Master2
5> go
Changed database context to 'DevBBS'.

-----------
      88150

(1 rows affected)
1> 

おおお、件数が取得できました!(Dobon.NET風)

7
6
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6