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

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

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Docker

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

Q&A

解決済

1回答

2411閲覧

コンテナへファイルをコピーしてもdocker-compose up -dするとファイルが消えてしまう

skmt33

総合スコア11

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Docker

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

1グッド

0クリップ

投稿2022/04/16 02:10

実現したいこと

docker-compose up -dを実行した際に、あるファイル(以下の例ではsamplefile.txt)をコンテナへコピーしたいです。
フォルダ構成は以下です。

[root@centos7 docker]# ls Dockerfile docker-compose.yml samplefile.txt

Dockerfileは以下のように作成しました。

FROM ubuntu:20.04 ENV TZ=Asia/Tokyo RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN apt-get update && apt-get install -y \ python3.9 \ python3-pip ENV PATH /usr/bin/python3.9:$PATH RUN pip install --upgrade pip RUN pip install notebook COPY samplefile.txt /sampledir/ WORKDIR / CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--allow-root"]

docker-compose.ymlファイルは以下のように作成しました。

version: '3' services: test01: build: context: ./ ports: - '8888:8888' volumes: - './samplevol:/sampledir' tty: true stdin_open: true

上記の環境でdocker-compose up -dを実行して環境を構築した後、ブラウザから<IPアドレス>:8888にアクセス※しました。

※docker psでコンテナIDを確認後、docker logs <コンテナID>を実行し、ログ情報の中からアクセストークンを取得してログイン。

発生している問題・エラーメッセージ

ブラウザから<IPアドレス>:8888へアクセスしまいたが、sampledirフォルダにはsamplefile.txtが存在しませんでした。
こちらの記事を読みますと、docker-compose.ymlの中で'./samplevol:/sampledir'としているために上書きされて見えなくなっているとのことでした。

今回のようにファイルをコンテナへコピーし、また、同時にvolumeもマウントさせたいという時はどのようにすればいいでしょうか。

補足情報(FW/ツールのバージョンなど)

[root@centos7 docker]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

[root@centos7 docker]# docker -v
Docker version 20.10.11, build dea9396

68user👍を押しています

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

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

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

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

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

hoshi-takanori

2022/04/16 02:20

マウントされる samplevol に samplefile.txt を置けば良いのでは…。
guest

回答1

0

ベストアンサー

既存でコメントがあるように、考え方の問題かと思います。
今回はdocker imageの中にファイルを入れ、docker-composeでホストOSのディレクトリをマウントする方法をとっていますが、すでに理解している通り、マウントはホストOSをゲストOSのディレクトリに上書く仕様なので今回の方法ではうまくいきません。
なので、あらかじめsamplevolにファイルを配置するのが手っ取り早いです。

どのような用途で使用するのかは分かりませんが、複数人に配る開発環境を作成している場合、例えばappディレクトリ内にDockerfile, docker-compose.yml, samplevolディレクトリとその中にsample.txtを入れてgithubなどで共有し、開発者はsamplevolディレクトリ内をいじるという方法の方がよいと思います。
というか、自分であればその方法をとります。
この場合だと、マウントをするとコンテナ内へsample.txtが共有され、新しく生成されたファイルも同ディレクトリ内であればホストOSと共有されます。
他の人とソースを共有したい場合は、appディレクトリ自体をgitやzip等で渡してしまえば、作業後の内容が反映されたsamplevolの共有ができます。(これが目的であればの話ですが)

投稿2022/04/18 04:38

YuuT

総合スコア668

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問