LoginSignup
12
11

More than 5 years have passed since last update.

Dockerコンテナ内のファイルをrsyncをつかってやりとりする

Last updated at Posted at 2016-08-24

コンテナとクライアントに rsyncコマンドがインストールされていれば、sshを経由しなくても docker exec コマンドを通じてrsyncが利用できます。

rsync のオプションに

--blocking-io -e 'docker exec -i'

をつけることで コンテナ名:パス でローカル側とファイルのやりとりができます。

カレントディレクトリの work の内容を rsync-test コンテナの /workへ同期

rsync --blocking-io -e 'docker exec -i' -av work rsync-test:/

rsync-test コンテナの /work の内容をカレントディレクトリの work の内容へ同期

rsync --blocking-io -e 'docker exec -i' -av rsync-test:/work .

コンテナ側はrootユーザでアクセスされるため、-a オプション だとパーミッション、ユーザ、オーナも同期されてしまい、UID,GIDを合わせた環境でないと意図しないユーザ・グループになるので注意が必要です。-a は -rlptgoD をまとめたものなので、-rlptgoD から p(perms), g(group), o(owner)を抜いた -rltDv をつかえば問題を回避できます。内容によってはpはあったほうがいいかもしれません。

rsyncの入っているコンテナで動作を確認してみる

rsync-testコンテナの作成と /etc ディレクトリの書き換えをする例です。debian:jessieのイメージに、rsyncをインストールし、何もしないサーバを起動するシンプルなDockerfileを使います。それをつかってrsyncの同期を動作を確認することができます。

$ git clone https://github.com/mamemomonga/docker-container-rsync-demo.git
$ cd docker-container-rsync-demo/debian-jessie
$ cat Dockerfile

Dockerfileの内容

FROM debian:jessie

RUN set -xe && \
    apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y rsync

CMD ["/bin/sh","-c","while true; do sleep 1; done"]

イメージの作成・コンテナの起動

$ docker build -t debian-jessie-rsync-test .
$ docker run --name rsync-test -d debian-jessie-rsync-test

リモートの/etc をローカルのworkの下にもってくる

$ rsync --blocking-io -e 'docker exec -i' -rltDv rsync-test:etc work/

ローカル側に空のファイルをつくってみる

$ touch work/etc/hogehoge

ローカルの work/etc を リモートの /etc に上書き

$ rsync --blocking-io -e 'docker exec -i' -rltDv work/etc rsync-test:/

etc/hogehoge がアップロードできたか確認

$ docker exec rsync-test ls -al /etc/hogehoge

コンテナの停止・削除・イメージ削除

$ docker stop rsync-test
$ docker rm rsync-test
$ docker rmi debian-jessie-rsync-test

参考

12
11
0

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
12
11