2017-06-26 8 views
1

私はこのレポにgolangコードを実行していますが、マウント名前空間に問題があります。コードが行うべきことは、独自のマウント名前空間内にプロセスを作成することです。だから私がsudo go run main.go run /bin/bashとコードを実行し、ディレクトリmytempの中にファイルを作成する場合、私は新しい開始プロセス内からそのファイルを見ることができるはずですが、そのファイルをホスト上のrootfsディレクトリに移動しようとすると、私はマウント名前空間のおかげでそのファイルを見ることができないはずです。 残念ながら私はまだこのファイルを見るので、実行しているプロセスは名前空間にマウントされていないようです。 コードを実行するには、https://github.com/ericchiang/containers-from-scratch/releases/download/v0.1.0/rootfs.tar.gzをrootfsとして使用し、/home/meの下に移動しました。次に、tmpfsマウントターゲットとして使用するmytempディレクトリを作成しました。 プロセスがマウントされた名前空間を持たない理由について考えてください。コンテナとsyscall.CLONE_NEWNS

ありがとうございます!

答えて

0

は、ホストマシンマウントをプライベートに設定することで解決できます。この場合、伝播イベントは他のマウントに受信または転送されず、RedHat - Sharing Mountsとなります。

あなたがコンテナを作成する前にこのコマンドは、ホストマシン上で実行する必要があります。

$ mount --make-rprivate/
+0

[ 'mount'](http://man7.org/linux/man-pages/man2/を呼び出しますmount.2.html)syscallに 'MS_PRIVATE | MS_REC'フラグを設定します。これは[Go](https://golang.org/pkg/syscall/#Mount)でも実行できます。 – ephemient

+0

これは正しい@ephemientです。次の例があります。 '' syscall.Mount( ""、 "/"、 ""、syscall.MS_PRIVATE | syscall.MS_REC、 "" ' –

関連する問題