稼働中のコンテナにファイルをコピー

Dockerにおいて表題の通り。たまにやりたくなっていつも調べなおすのでメモ。

■ 環境

  • Docker 1.8.2

■ copy

下記のように実行することで、既に稼働しているコンテナに対して、ローカルのファイルをコピーすることができる。

稼働中のコンテナを確認。

$ docker ps -a
CONTAINER ID   IMAGE                    COMMAND                  CREATED             STATUS              PORTS                          NAMES
72de143ca974   jplock/zookeeper:3.4.6   "/opt/zookeeper/bin/z"   3 minutes ago       Up 3 minutes        2181/tcp, 2888/tcp, 3888/tcp   adoring_raman
$

CONTAINER ID“を調べ、`exec`コマンドを利用する。まずはコピー前のファイルを確認。

$ docker exec -i 72de143ca974 cat /opt/zookeeper/conf/zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
  :
$

ローカルにコピーしたいファイルを準備。わかりやすいように下記にしている。

$ cat copy.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
$

このファイルをコピーする。

$ docker exec -i 72de143ca974 /bin/bash -c "cat > /opt/zookeeper/conf/zoo.cfg" < copy.cfg
$

確認。

$ docker exec -i 72de143ca974 cat /opt/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
$

コピーできたようだ。

$ docker exec -i [CONTAINER ID] /bin/bash -c "cat > [コピー先ファイル]" < [コピー元ファイル]

以上。

■ 関連