docker-compose cp がやりたい
複数のdockerコンテナを管理できる docker-compose コマンドですが、コンテナにファイルをコピーしようとdocker-compose cp
をやろうとしてもそんなコマンドないよと言われてしまいます。
なのでその代わりに使える方法のメモ。
TL;DR
ホストからコンテナへコピー
docker cp {ホスト側のファイルパス} $(docker-compose ps -q {サービス名}):{docker内のパス}
コンテナからホストへコピー
docker cp $(docker-compose ps -q {サービス名}):{docker内のパス} {ホスト側のファイルパス}
解説
docker cp
通常のdockerコマンドでファイルをコピーしようとするとこんな感じです。
docker cp {コピー元} {コピー先}
ホストからコンテナ
docker cp {ホスト側ファイルパス} {コンテナ名}:{docker内のパス}
コンテナからホスト
docker cp {コンテナ名}:{docker内のパス} {ホスト側ファイルパス}
docker-compose ps
docker-compose ps
コマンドは動いているサービス(コンテナ)の一覧を表示するコマンドです。
-p {サービス名}
をつけることで、サービスのコンテナIDのみが表示されるようにしています。
version: '3'
services:
mysql: # <- ここの名前
image: mysql
build:
context: ./
dockerfile: ./docker/mysql/Dockerfile
上記のようなdocker-compose.yml
ファイルがあった場合{サービス名}
はmysql
となります。
docker-compose ps -p mysql
組み合わせる
上記の二つを組み合わせると冒頭のコマンドになります。
ホストからコンテナへコピー
docker cp hoge.txt $(docker-compose ps -q mysql):/var/hoge.txt
コンテナからホストへコピー
docker cp $(docker-compose ps -q mysql):/var/hoge.txt hoge.txt