質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

samba

Samba(サンバ)とは、UNIX系OSにおいてSMBを用いたサービスを提供するためのソフトウェアです。ネットワークを通じて、ファイル共有及びプリンタ共有などのサービスをWindowsマシンへと提供します。ライセンス体系GPLに基づきフリーソフトウェアとして公開されています。

Q&A

解決済

1回答

1573閲覧

SQLServeronLinuxをDockerでUser毎に運用する際のファイルアクセス権限問題

amu0x

総合スコア17

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

samba

Samba(サンバ)とは、UNIX系OSにおいてSMBを用いたサービスを提供するためのソフトウェアです。ネットワークを通じて、ファイル共有及びプリンタ共有などのサービスをWindowsマシンへと提供します。ライセンス体系GPLに基づきフリーソフトウェアとして公開されています。

0グッド

0クリップ

投稿2019/02/26 11:15

前提・実現したいこと

SQLServer on LinuxをCentOS7+Dockerコンテナで稼働させます。
hostにUserを登録して、以下ディレクトリをマウントして永続化します。
-v /home/<username>:/var/opt/mssql

また、hostにはsambaをインストール・設定して、/home/<username>ディレクトリをWindowsから共有フォルダとして利用できるようにします。
該当ユーザー(<username>)の認証でのみアクセスできるよう設定します。
共有フォルダの目的は、主にmdf,ldfやバックアップファイル等をWindowsとやり取りすることです。

各ユーザーは基本的にLinuxを意識せず、Windows上からのManagement Studioとエクスプローラ操作のみでこの環境を運用します。

発生している問題

SQLServer on Linuxがroot権限で稼働しているので、バックアップファイル等を作成すると、そのファイルもroot権限でしか触れません。
各々のユーザーの権限でバックアップファイルをLinux⇒Windowsに取り出すことができません。

該当のソースコード

docker run --name user01sql2017
-e 'ACCEPT_EULA=Y'
-e 'SA_PASSWORD=<userstrongpassword>'
-e 'MSSQL_LCID=1041'
-e 'MSSQL_COLLATION=Japanese_CI_AS'
-p 1401:1433
-v /etc/passwd:/etc/passwd:ro
-v /etc/group:/etc/group:ro
-v /home/user01:/var/opt/mssql
-d mcr.microsoft.com/mssql/server:2017-latest

試したこと

docker runを該当ユーザーで実行→アクセス拒否
visudoでroot権限を記述してdocker run→コンテナは作成されるがExitedのまま稼働できず、logにはやはりアクセス拒否
ユーザーをdockerグループに所属させてdocker run→結局root権限になる

まだまだ知識が追い付かず、基本的なところを抜かしているかもしれません。
手法に拘りすぎているようで、発想の転換が必要なようにも思うのですが、アイデアが出てきません。
何かご教授いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

docker cp コマンドを利用することで、
コンテナ上のファイルをコマンド実行ユーザの所有権で取得することができます。

例えば、コンテナ user01sql2017 上の所有権がrootである /etc/hostsを
docker cp user01sql2017:/etc/hosts .
と実行して取得するとカレントディレクトリに生成される hosts ファイルは
内容はコンテナ上と同一内容で、ファイル所有権はホストの実行ユーザのものになります。

参考: docker docs - docker cp

Ownership is set to the user and primary group at the destination. For example, files copied to a container are created with UID:GID of the root user. Files copied to the local machine are created with the UID:GID of the user which invoked the docker cp command.

投稿2019/02/26 21:22

thaim

総合スコア175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amu0x

2019/03/05 09:12 編集

回答ありがとうございます。勉強になります。 Windowsからバッチを実行→共有フォルダ内にダウンロード可能なファイルが複製されている…という仕組みが作れれば、各ユーザーで運用可能と思います。 これから諸々勉強して試行してみようと思います。 ### 追記 docker cp コンソールで動作を確認できました。 あとは、Windowsからバッチ実行できるまでを手順化できるかどうか…やってみます。 ### 追記2 WindowsにOpenSSHを設定して、PowerShellでバッチ実行できました。 コンテナのマウントディレクトリからホストの同ディレクトリへと上書きコピーすることができたので、とても便利でした。 `#!/bin/bash $FILENAME = Read-Host "転送したいファイル名を入力" ssh user01@<host-ip> docker cp user01sql2017:/var/opt/mssql/backup/$FILENAME /home/user01/backup/$FILENAME`
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問