
私はDockerを使ってイメージを作成し、openjdk:8-jdk-alpine
sshfs + fusionを使ってリモートフォルダをマウントしようとしています。そのためにコンテナを実行します。docker run -d --rm --device /dev/fuse --privileged my_container
Dockerfileのコードに次の行を追加しました。
RUN echo "sshfs#myuser@${host}:${folder} $mount_folder fuse allow_other,default_permissions,umask=0007,idmap=file,uidfile=/etc/sshfs_umap,gidfile=/etc/sshfs_gmap,nomap=ignore,StrictHostKeyChecking=no,IdentityFile=/root/.ssh/id_rsa 0 0" >> /etc/fstab
この行は、デフォルトでsshfsを使用してリモートフォルダを/ etc / fstabにマウントするコマンドを追加します。コンテナにアクセスするとファイルは表示されませんが、mount_folder
手動で実行すると
$mount -a
フォルダが正常にマウントされました。コンテナの起動時にどのように自動的にインストールできますか?
答え1
次のDockerfile実行コマンドを実行する代わりに動作させました。
RUN echo "sshfs#myuser@${host}:${folder} $mount_folder fuse allow_other,default_permissions,umask=0007,idmap=file,uidfile=/etc/sshfs_umap,gidfile=/etc/sshfs_gmap,nomap=ignore,StrictHostKeyChecking=no,IdentityFile=/root/.ssh/id_rsa 0 0" >> /etc/fstab
これを削除し、.shスクリプトを実行し、次の行を含むdockerfileにCMDコマンドを追加しました。
#!/bin/sh
sshfs -o allow_other -o reconnect -o default_permissions -o 'umask=0007' -o 'idmap=file' -o 'uidfile=/etc/sshfs_umap' -o 'gidfile=/etc/sshfs_gmap' -o 'nomap=ignore' -o 'StrictHostKeyChecking=no' -o 'IdentityFile=/root/.ssh/id_rsa' myuser@$SFTP_HOST:$SFTP_ROOT_FOLDER /myfolder
#do tother things here to run your app
リモートファイルシステムは、Dockerコンテナが実行されるたびにマウントされます。 /etc/fstabが実行されていないのは、おそらくコンテナなので、実際には最初から始まっていないからです。したがって、/ etc / fstabは実行されません。
答え2
docker run -it --rm debian cat /etc/fstab
# UNCONFIGURED FSTAB FOR BASE SYSTEM
failed to resize tty, using default size
Dockerコンテナのfstabを変更できるという事実さえ知りませんでしたが、なぜそれをしたいのか混乱しています。通常、dockerはファイルシステムのマウントを処理し、ボリュームドライバ/プラグインもあります。これを行うSSHFSの場合は、これらすべてを処理します。
docker plugin install vieux/sshfs
Plugin "vieux/sshfs" is requesting the following privileges:
- network: [host]
- mount: [/var/lib/docker/plugins/]
- mount: []
- device: [/dev/fuse]
- capabilities: [CAP_SYS_ADMIN]
Do you grant the above permissions? [y/N] y
latest: Pulling from vieux/sshfs
Digest: sha256:1d3c3e42c12138da5ef7873b97f7f32cf99fb6edde75fa4f0bcf9ed277855811
52d435ada6a4: Complete
Installed plugin vieux/sshfs
docker volume create -d vieux/sshfs -o sshcmd=root@localhost:/srv/ -o password=changeme mysshvol
docker run -it --rm -v mysshvol:/mnt debian
これをしないのはなぜですか?私の経験によれば、実際にDocker用のボリュームドライバ/プラグインを開発していない限り、ボリュームマウント/マッピングをDockerに任せるのが最善です。これにより、追加の手間と追加の依存関係が発生したり、コンテナが特定のボリュームをマウントしたりする必要がなくなります。 。ファイルシステムをコンテナとして。