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

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

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

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

docker-compose

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

Linux

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

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

Q&A

解決済

2回答

2562閲覧

dockerでrcloneを動かし、ホストにマウントしたフォルダでクラウド上のファイルを参照できるようにしたい。

chekke1999

総合スコア21

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

docker-compose

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

Linux

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

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

0グッド

0クリップ

投稿2022/02/13 17:07

以下のようにdocker-composeとdockerfile、実行用のbashを記述しました。
この状態でdocker-compose up -dにてコンテナを起動させると、コンテナ上ではrcloneでマウントした各種クラウドストレージの中身が参照できるのですが、mountしてるはずのホストOS上では何も見えません。

ちなみに下記bash内での"mkdir -p /data/Dropbox/ /data/GoogleDrive/ /data/OneDrive/ /data/OneDrive/ /data/MEGA/"にて生成されたディレクトリ自体はホスト側からも見えます。rcloneでマウントしたクラウドストレージ上のファイルやディレクトリのみが見えません。

なにか間違っていますでしょうか?

bash

1#!/bin/ash 2#Start Demon 3 4mkdir -p /data/Dropbox/ /data/GoogleDrive/ /data/OneDrive/ /data/OneDrive/ /data/MEGA/ 5 6umount -f /data/Dropbox/ 7rclone mount dropbox: /data/Dropbox/ \ 8 --allow-other \ 9 --file-perms 777 --dir-perms 777 \ 10 --vfs-cache-mode full \ 11 --umask=0 \ 12 -vv & 13 14umount -f /data/GoogleDrive/ 15rclone mount googledrive:/ /data/GoogleDrive/ \ 16 --allow-other \ 17 --file-perms 777 --dir-perms 777 \ 18 --vfs-cache-mode full \ 19 --umask=0 \ 20 -vv & 21 22umount -f /data/MEGA/ ; 23rclone mount mega:/ /data/MEGA/ \ 24 --allow-other \ 25 --file-perms 777 --dir-perms 777 \ 26 --vfs-cache-mode full \ 27 --umask=0 \ 28 -vv & 29 30umount -f /data/OneDrive/ 31rclone mount onedrive:/ /data/OneDrive/ \ 32 --allow-other \ 33 --file-perms 777 --dir-perms 777 \ 34 --vfs-cache-mode full \ 35 --umask=0 \ 36 -vv

dockerfile

1FROM rclone/rclone:latest 2 3COPY ./start_rclone.sh /usr/local/bin 4 5ENTRYPOINT [ "/bin/ash" ] 6CMD [ "/usr/local/bin/start_rclone.sh" ] 7

yml

1version: "3.7" 2services: 3 rclone: 4 build: 5 context: ./ctr/rclone 6 dockerfile: ./dockerfile 7 container_name: rclone 8 environment: 9 TZ: Asia/Tokyo 10 volumes: 11 - ./ctr/rclone/configdir/:/config/rclone/ 12 - /mnt/Cloud/user_name/:/data/:shared 13 - /var/log/rclon/:/var/log/ 14 - /etc/passwd:/etc/passwd:ro 15 - /etc/group:/etc/group:ro 16 security_opt: 17 - apparmor:unconfined 18 cap_add: 19 - SYS_ADMIN 20 devices: 21 - /dev/fuse 22 logging: 23 driver: json-file 24 options: 25 max-file: '1' 26 max-size: 300k 27 restart: unless-stopped

環境

ホストOS : Ubuntu 20.04 LTS
Docker version: 20.10.7, build 20.10.7-0ubuntu5~20.04.2
Docker Compose version: v2.2.3

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

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

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

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

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

guest

回答2

0

自己解決

Docker Composeのバージョンを2.2.3から1.25.0に下げることでマウントが正常にできるようになりました。1.29.2でも動作確認できました。2系の他のバージョンも試しましたが全部ダメでした。

投稿2022/02/19 13:25

chekke1999

総合スコア21

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

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

0

マウントは「マウント元のファイルシステムやファイル・ディレクトリ」→「マウント先のファイル・ディレクトリ」にマッピングするものですので、方向があります。
「マウント元」はブロックデバイスだったり、ファイル・ディレクトリ(loopback, bind)だったり、ファイルサーバー(NFS, SMB など)だったりします。

今回の場合、マウントの方向が下記のようになので、クラウドストレージを Dockerホストで見ることはできないでしょう。
Dockerコンテナの /data/Dropbox/ 以下のファイル・ディレクトリを /data/ 以下にコピーすれば、Dockerホスト側でも見れると思います。

Host:/mnt/Cloud/user_name/ ==(bind)==> Container:/data/ Container:/data/Dropbox/ <==(rclone)== Dropbox

また、以下のように Dockerコンテナの /data/Dropbox/ などを Dockerホスト側でマウントする経路を追加すればできるかもしれません。
Dockerでそのような仕組みがあるのか知りません。
別途、Dockerコンテナをファイルサーバーにする必要がありそうです。

Host:/mnt/Cloud/user_name/ ==(bind)==> Container:/data/ Container:/data/Dropbox/ <==(rclone)== Dropbox Host:/some_place/Dropbox/ <==( ? )=== Container:/data/Dropbox/

投稿2022/02/14 23:53

TaichiYanagiya

総合スコア12202

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

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

chekke1999

2022/02/16 13:28 編集

rcloneのマウントの処理は、bindの処理の後に動いてるはずなので、 Host:/mnt/Cloud/user_name/ ==(bind)==> Container:/data/ の向きでも問題ないと思います。
TaichiYanagiya

2022/02/16 15:40

違います。 マウント先の kernel やプロセスからマウントポイントにアクセスする必要があります。 コンテナ内で /data/ にアクセスしたことを kernel が感知してホストの /mnt/Cloud/user_name/ にアクセスできます。 コンテナ内で /data/Dropbox/ にアクセスしたことを rclone が感知して Dropbox にアクセスすることができます。 しかし、ホストで /mnt/Cloud/user_name/Dropbox/ にアクセスしても、ホスト内にある(コンテナから作成された)ディレクトリにアクセスするだけで、コンテナ内の rclone は感知しません。 最後に追加した逆向きのマウントをした場合、ホストで /some_place/Dropbox/ にアクセスすると、コンテナ内のファイルサーバープロセスが /data/Dropbox/ にアクセス→rclone が感知して Dropbox にアクセスすることができるのでは? ということです。
chekke1999

2022/02/19 12:55

Docker Compose version: v2.2.3からdocker-compose version 1.25.0に落としたら何故かホスト側からも見えるようになったのですが、docker-composeのバージョンでdockerデーモンの動き変わったり、マウントの挙動が変わったりするんですかね...。ひとまず解決したので本質問closeしますが、なにかこの辺の仕様ご存知だったりしますか?
chekke1999

2022/02/19 13:23

1.29.2でもいけました。やはり1系と2系で大幅に仕様が違うのか??
TaichiYanagiya

2022/02/19 15:13

え、そうなのですか? kernel が共通だから、というか、コンテナの隔離が不十分だから、ホスト側のアクセスがコンテナ側に伝わっているのかもしれません。
chekke1999

2022/02/20 10:04

私のdockerのリファレンスのsharedのところの解釈が正しければ、多分1系の動作が正しいのだと思います。 https://matsuand.github.io/docs.docker.jp.onthefly/storage/bind-mounts/ docker-composeの2系はできたばかりなのでdockerの操作に色々不具合とか抱えてそうですね。英語苦手なのでdocker-compose公式のgithubのissueを直に読んだわけではないですが...
TaichiYanagiya

2022/02/21 00:39

shared ってそういう挙動が正しいのですね。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問