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

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

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

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

Q&A

1回答

842閲覧

Dockerでボリュームを設定しているがファイルがバインドされていない

WatanabeJin

総合スコア44

Docker

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

0グッド

0クリップ

投稿2021/08/29 01:37

編集2021/08/29 03:30

問題

docker-in-dockerを行っており、Ubuntuコンテナを起動した後に、中でPythonコンテナをdocker-compose.ymlで起動するのですが、なぜかファイルがバインドされません。

Docker Desktop for Windowsを利用して以下のようなファイルで行っています。

root/ ┣ Dockerfile (Ubuntu) ┣ docker-compose.yml (Ubuntu) ┣ opt ┣ Dockerfile (Python) ┣ docker-compose.yml (Python) ┣ opt ┣ test.txt

Dockerfile(Ubuntu)

Dockerfile

1FROM docker:20.10 as docker 2FROM ubuntu:20.04 3 4RUN apt-get -y update && \ 5 apt-get -y upgrade 6 7RUN apt-get install -y \ 8 docker-compose 9 10# ホストのdocker daemon共有 11COPY --from=docker /usr/local/bin/docker /usr/local/bin/

docker-compose.yml(Ubuntu)

docker

1 version: '3' 2services: 3 python3: 4 restart: always 5 build: . 6 container_name: 'ubuntu' 7 working_dir: '/root/opt' 8 tty: true 9 volumes: 10 - ./opt:/root/opt 11 - /var/run/docker.sock:/var/run/docker.sock

Dockerfile(Python)

Dockerfile

1FROM python:3 2USER root 3 4RUN apt-get update 5RUN apt-get -y install locales && \ 6 localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 7ENV LANG ja_JP.UTF-8 8ENV LANGUAGE ja_JP:ja 9ENV LC_ALL ja_JP.UTF-8 10ENV TZ JST-9 11ENV TERM xterm 12 13RUN apt-get install -y vim less 14RUN pip install --upgrade pip 15RUN pip install --upgrade setuptools

docker-compose.yml(Python)

docker

1version: '3' 2services: 3 python3: 4 restart: always 5 build: . 6 container_name: 'python3' 7 working_dir: '/root/opt' 8 tty: true 9 volumes: 10 - ./opt/:/root/opt

test.txt

test.txt

1hello world

UbuntuコンテナはDocker Desktopのソケットを共有してDockerを利用しています。
まずUbuntuコンテナに入ります。

$ docker-compose up -d $ docker exec -it ubuntu bash

そのあと、docker-in-dockerでPythonコンテナを立ち上げます。

$ docker-compose up -d $ docker exec -it python3 bash $ ls # test.txtがない

そして、入った中で本来であればopt/をボリュームで設定しているので、test.txtが共有されるはずなのですがされていません。

Ubuntuコンテナではボリュームの設定は反映されています。
なぜかコンテナの中ではボリュームを設定してもフォルダだけは共有されますが、中のファイルがありません。

以前やったときにはうまく共有されていたきがします。

共有が確認された後に行ったのが、minicondのインストールでした。
これでpathを環境変数に追加したりしたのですが、影響はありますか?

どうして共有されないのでしょうか。教えていただきたいです。

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

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

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

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

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

guest

回答1

0

手許の Docker Desktop 3.5 + WSL2 (Windows 10) では、書かれた通りの手順で、意図されたように test.txt の中身が表示されました。記述どおり、問題ないように見えます。

コマンド docker inspect python3 でコンテナを調べても、WSL2 の Linux に date.txt がある「/root/opt/opt」を bind mount しているように見えます。

yaml

1 "Mounts": [ 2 { 3 "Type": "bind", 4 "Source": "/root/opt/opt", 5 "Destination": "/root/opt", 6 "Mode": "rw", 7 "RW": true, 8 "Propagation": "rprivate" 9 } 10 ],

可能性としては、 docker-compose.yml での volumes: 指定は、 docker-compose コマンドを実行したディレクトリからの「相対パス」です。

もしかすると、違うディレクトリに移動されて実行されていたり、環境が混在していたりして、意図する通りにコマンドを実行できていない可能性があります。

手順の1つ1つを実行する時、現在のディレクトリ名を確認したり、今どのコンテナで操作しているかなどを確認しながら試されてみてはいかがでしょうか。

投稿2021/08/29 03:20

zembutsu

総合スコア1584

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

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

WatanabeJin

2021/08/29 03:24

私も昨日まではバインドできていたようでした。 が、なぜか本日試したところバインドできなくなってしまいました。 そこで、Dockerを再インストールしたのですが、だめでした。 原因わかりますでしょうか。
zembutsu

2021/08/29 03:33

docker in docker ではなく、普通にマウントができるかどうかから試されてみてはいかがでしょう。
zembutsu

2021/08/29 03:36

たとえば、Docker ホスト側(WSL2)の「/root/opt/opt」をマウントしない Docker イメージが残っているのかもしれません。そのような場合であれば、まったく別のディレクトリに、docker-compose.yml などを置き、docker-compose up -d などをやりなおされると上手くいくと思います。
WatanabeJin

2021/08/29 03:36

通常のマウントは、root/optをマウントできているので問題なさそうと思っています。 なぜかコンテナ内でのマウントができていないようでした。 また、フォルダはマウントされているようなのですが、ファイルがマウントされていないのも気になります。
zembutsu

2021/08/29 03:40

Docker Composeでは、「./opt」をコマンドを実行した場所からの相対パスとみなします。このコマンド実行時「./opt」にあたる場所が存在しなければ、コンテナ内では空っぽのディレクトリを作る仕様です。 ちなみに、別のLinuxの環境上でも同じように手順を試しましたが、test.txt が存在できましたので、やはり手順としては問題ないように見えます。
WatanabeJin

2021/08/29 04:04

COPY ./opt / /root/opt をDockerfileで行うとコピーはできました。 また、コンテナのマウントしたディレクトリ/root/optでファイルを作成したところ、ローカルのディレクトリにファイルは増えていませんでした。コンテナの中にのみできていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問