2017-03-22 13 views
0

ドッカーとドッカーの新作です。
私はRaspberry PIでdocker-composeを使用してサービスを実行しようとしています。このサービスが使用するデータは、私のNASに保存されており、samba経由でアクセス可能です。
私は現在、コンテナ起動するには、このbashスクリプトを使用しています:SMB共有をドッカーボリュームとして使用する

sudo mount -t cifs -o user=test,password=test //192.168.0.60/test /mnt/test 
docker-compose up --force-recreate -d 

docker-compose.ymlファイルは、単に画像からコンテナを作成し、ホスト上の/mnt/testフォルダに自身のローカル/home/testフォルダをバインドします。

スクリプトから起動する場合、これは完全に正常に動作します。しかし、ホストがリブートしたときにコンテナが自動的に再起動するようにしたいので、再起動ポリシーとして 'always'を指定しました。再起動の場合、コンテナはリモートフォルダをマウントしている人がいなくても自動的に起動し、結果としてサービスは正しく動作しません。

何がこの問題を解決するための最善のアプローチでしょうか?私はリモート共有をマウントするためにボリュームドライバを使用する必要があります(私はARMアーキテクチャを採用していますので、選択肢は限られています)。ドッカー作成プロセスを開始するときにホスト上でシェルスクリプトを実行する方法はありますか?私はコンテナの中からリモートフォルダをマウントする必要がありますか?

おかげで、この問題を解決するための最良の方法だろう何

+2

使用しているOSは何ですか?どのようなinitシステムがありますか?可能であれば、これを管理するためにsystemd依存関係を使用することをお勧めします。 – jaxxstorm

+0

Debianに基づいたOSMCです。私は、移植性が高く、外部ホスト構成に依存しにくいので、ドッカー自体を使用したソリューションが望ましいと考えていました。間違っていますか? – Zelgadis

答えて

0

私は最終的に/etc/rc.localファイルで実行するスクリプトを定義することで、自分自身の問題を "解決"しました。再起動するたびにmountとdocker-compose upコマンドが起動します。

特定のUnixフレーバに依存しない2行のコードしかないので、私が見つけられなかったドッキング専用ソリューションを除いて、最もポータブルなソリューションが気に入っていました。

ありがとうございました

1

@Frapが示唆しているように、systemd単位を使用して、マウントとサービスとそれらの間の依存関係を管理します。

This documentはあなたにsystemdユニットとしてのSambaマウントを設定できます方法について説明します。その後、/etc/systemd/system/mnt-test.mount

[Unit] 
Description=Mount Share at boot 
After=network-online.target 
Before=docker.service 
RequiredBy=docker.service 

[Mount] 
What=//192.168.0.60/test 
Where=/mnt/test 
Options=credentials=/etc/samba/creds/myshare,rw 
Type=cifs 
TimeoutSec=30 

[Install] 
WantedBy=multi-user.target 

置き、この、および:Raspbianの下では、それは次のようになります

systemctl enable mnt-test.mount 
systemctl start mnt-test.mount 

After=network-online.targetラインは、この共有にアクセスしようとする前に、ネットワークが利用可能になるまで待機することにsystemd起こす必要があります。 Before=docker.service行では、systemdはこの共有がマウントされた後にのみdockerを起動します。 RequiredBy=docker.serviceは、docker.serviceを起動すると、この共有が最初にマウントされ、マウントが失敗した場合はドッキングが開始されないことを意味します。

これはむしろ、ユニット自体にユーザー名/パスワードを指定するよりも、ファイルの資格情報を使用しています。あなただけusername=password=credentialsオプションを置き換えることができ

username=test 
password=test 

:資格証明書ファイルは次のようになります。

私は、コンテナ内部からリモートフォルダをマウントする必要がありますか?

標準ドッカーコンテナはファイルシステムをマウントすることはできません。 (docker runコマンドラインに--privilegedを追加することによって)特権を持つコンテナを作成できますが、一般的には悪い考えです。そのコンテナにはホストへのルートアクセスが制限されていないためです。

関連する問題