Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

経緯

開発環境として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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away