今回はAWS上で展開しているDockerコンテナの中からファイルをローカルに持ってくる方法を説明します。
今回やりたいこと
- seleniumをheadlessモードで起動しているが、予期せぬエラーに見舞われてしまい現在どのページにいるのか判別できなくなってしまったので、スクリーンショットを撮り開いているページを確認したい。
大まかな手順
① Dockerコンテナ→EC2のディレクトリ
② EC2のディレクトリ→ローカルのディレクトリ
手順の説明
- まずEC2内のDockerコンテナからEC2にスクリーンショットを持ってきます。
- スクリーンショットを保存する場所はコンテナ内のvolumesでマウントされているファイルを指定しておきましょう。(docker-compose downしてもスクショが消えないようにするためです。)
- 次に以下のコマンドでコンテナID を調べます。
docker container ls -a
- ここで目的のコンテナIDを取得し以下のコマンドでEC2内にコピーします。
docker cp containerID:/コピー元のファイルパス コピー先のファイルパス 例:docker cp e471545d21ad:/myapp/tmp/sample.jpg .
- ここまででEC2内にスクリーンショットを持ってくることができました。
- 次にEC2からローカルにファイルをコピーします。
- EC2にアクセスするためのkeyが置いてあるディレクトリに移動し、以下のコマンドを実行します。
scp -i "example.pem" ec2user@IPaddress:/home/ec2user/sample.jpg ./
- ここでこのコマンドを解説します。
-
scp
はssh + cpの略です。 -
ec2user@IPaddress:/home/ec2user/sample.jpg
はEC2内のファイルパスです。 -
./
はローカルのコピー先です。
- 上記のコマンドを実行し、EC2からローカルにファイルをコピーしてくることができました。
まとめ
- プログラムによってはDockerコンテナ内にファイルが生成されてしまうこともあるかと思うので内容を確認したい際にはぜひ使ってもらえればと思います。