質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

674閲覧

コンテナを立ち上げ中にホストOSで新しいファイルを追加したときに反映しない

Taka_input

総合スコア12

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/11/07 18:26

#質問
コンテナを立ち上げた中に、ホストOS(ローカル)で作成したファイルをコンテナ立ち上げ中に反映させたいです。
一度buildした時にローカルにあるa.pyのみをコンテナにCOPYしてコンテナを立ち上げた時、立ち上げ中にローカルで新しくb.pyを加えたときに再びbuildせずb.pyをコンテナにコピーすることはできますでしょうか?

Dockerfile

1FROM python:3.6 2 3WORKDIR /app 4 5RUN apt-get update 6 7RUN pip install --upgrade pip \ 8 9COPY . /app/ 10 11CMD [ "/bin/bash"]

実行コマンド

Docker

1docker build -t line/python . 2docker run -it line/python

#やりたいこと

#このときディレクトリにはa.pyしかない docker build -t line/python . docker run -it line/python root@1fb2f6bb85c5:/app#ls Dockerfile a.py #ローカルでb.pyを追加 root@1fb2f6bb85c5:/app#ls Dockerfile a.py #lsをしたときにb.pyが反映されるようにしたい #再びbuildするとb.pyが反映するが、毎回するのは面倒

Dockerについてはまだ勉強中ですの、基本的な部分かもしれませんがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

立ち上げ中にローカルで新しくb.pyを加えたときに再びbuildせずb.pyをコンテナにコピーすることはできますでしょうか?

可能か不可能か、という問であれば、可能です。
ですが、その前にDockerの仕組みを理解した方が良いと思います。

まずDockerイメージのビルドと、実行中のコンテナ上での作業の違いを理解しましょう。
ご参考

イメージをビルドすると、「読み取り専用」のイメージレイヤが作成されます。
そのため、同じイメージから起動されたコンテナは全て同じものになります。

コンテナを起動すると、そのイメージの上に書き込み可能なレイヤを追加します。
起動中に行ったコンテナ内のファイルの変更は、起動中は保持されますが、これは揮発的なものなので、コンテナを終了すると捨てられます。

コンテナが起動中にファイルの追加・削除・変更等を行う場合は、ボリュームと呼ばれる特別な領域を割り当てるか、バインドマウントという仕組みで外部のファイル・フォルダを割り当ててからコンテナを起動する必要があります。(ご参考

そのため、そのファイルをどのように扱いたいのか次第で対応が変わってきます。

追加したいファイルがそのコンテナのイメージに対する永続的な変更(コンテナを何度立ち上げても同じファイルが含まれて欲しい)であれば、再度ビルドしてイメージを新しく作る必要があります。

そうではなく、一時的に参照したい場合などであれば、通常はバインドマウントしたフォルダにそのファイルを追加します。

また、あらかじめネットワークで参照可能なように構成されたコンテナであれば、通常の仮想マシンのようにネットワーク経由でコンテナ内にファイルコピーを行うという方法も可能ではありますが、最初からそのような利用方法を想定したコンテナでなければ、無駄にネットワークの設定が必要になるため、やめておいた方が無難でしょう。

投稿2020/11/07 22:33

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Image に追加したい場合

おそらくその方法はありません.Buildし直す必要があります

b.py を含むコンテナが欲しい場合

簡単な方法はディレクトリをコンテナにマウントし,b.py を保存したいディレクトリにコピーするのが簡単でしょう.
マウントしただけでも b.py を参照することはできますが,削除などすべての操作が反映されます.

マウントしただけの場合は追加で c.py を増やしてもそれが反映されることが利点です.

投稿2020/11/07 21:32

ebal

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問