LoginSignup
10
10

More than 5 years have passed since last update.

Dockerコンテナ内のディレクトリをsshfsでマウントする

Last updated at Posted at 2015-03-19

経緯

開発環境としてDockerコンテナを使いたいが、コンテナ内のファイルをIDEで管理したいという場合、dockerのvolume機能 + VMのファイル共有機能を使ってローカルから操作できるようにする方法と、sshfsでdocker内のディレクトリをローカルにマウントして使う方法が考えられる。

前者は後者より簡潔に実現できるという利点があるが、dockerコンテナ「が」他のファイルをマウントすることになるので、パーミッションの問題等がつきまとう。

後者はsshdを立ち上げるのが面倒、かついくつかの問題が発生するが、dockerコンテナ内のファイル「を」ローカルにマウントするため、前者の問題が発生しない(と思うけどどうでしょうか)。

今回は前者の方法を行う。

やり方

boot2dockerを使うという前提で話を進める。Vagrantの場合でもだいたい同じだと思う。

ローカル -> VMのポートフォワーディングの設定

dockerコンテナに対してsshで接続できるようにするため、予めローカルの特定のポートをdockerコンテナの特定のポートに対して転送するようにしておく。

$ # VBoxManage controlvm "boot2docker-vm" natpf1 delete ssh 既存の設定がある場合、下のコマンドで上書きすることはできないので、一度削除する
$ VBoxManage controlvm "boot2docker-vm" natpf1 "ssh,tcp,127.0.0.1,8022,,49153" # ポートフォワーディングの設定。'ssh'は任意の文字列でok

これでHostの8022がVMの49153に転送される。

コンテナのビルド

次に、dockerに接続してsshdの入ったコンテナをビルドする。DockerfileはSven Dowideitさん作の以下のものを使うと簡単。(参照元

# sshd
#
# VERSION               0.0.2

FROM ubuntu:14.04
MAINTAINER Sven Dowideit <SvenDowideit@docker.com>

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

boot2docker sshでvmに入り、上記のDockerfileを用意したらDockerコンテナを起動する。

docker build -t develop .
docker run -d -P develop

これで恐らく、VMの49153がdockerコンテナの22にポートフォワードされる(49153とは限らんけど、とりあえずそういう前提で)。

sshfsでマウントする

これでDockerコンテナにsshを繋いだり、

ssh root@localhost -p 8022 # pass: screencast

sshfsでディレクトリをマウントすることができるようになる。

sshfs root@localhost:/ ./container -p 8022

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10