2017-04-06 11 views
2

私は状況があります。私は、ディレクトリ内のファイルを編集できるようにしたいので、私はできません 現在のディレクトリを読み取り専用としてマウントするが、コンテナ内の変更を許可する方法はありますか?

  • 読み取り専用/ mycodeにディレクトリ〜/ tmpに/ mycodeをマウントしたい

    • をちょうど私が書き込み/読み出し
  • 〜を/ tmp/mycodeが
  • かなり大きいので、私はそれをマウントすることはできませんけれども、それはホストファイルシステム上の変更を保持しないようにしたい -v /my/local/path/tmp/mycode:/mycode
    • を実行します

    基本的に、マウントされたボリューム内のファイルを編集できるようにしたいが、変更を保存しないようにしたい。

    ADD . /mycode 
    

    し、そのコンテナを実行します。

    私の現在のワークフローはdockerfileを使用してダミーのコンテナを作成することです。

    しかし、リポジトリが大きくなるにつれて、この手順には時間がかかります。なぜなら、コンテナ内のファイルを操作できるように〜/ tmp/mycodeの完全なコピーを作成することしか考えられないからです。

    私はディレクトリをマウントしてコンテナ内にコピーしてそのコンテナをコミットすることも考えましたが、それは同じ問題があります。

    ドッカーコンテナを実行して、ディレクトリ全体をコピーするのに手間がかからずにファイルの編集を許可する方法はありますか?

    最新のMac用ドッカー、現在はバージョン17.03.1-ce-mac5(16048)を使用しています。

    +0

    ディレクトリが(git?)リポジトリのようですが、実際に読み書き可能にマウントしたり、現在のブランチステートを隠したり、ホストファイルシステムの変更を許可したり、ハードリセットを行ったり、以前のコンテナが停止したときの状態に戻りますか? –

    +0

    @ ZathrusWriterはうまく動作しますが、誤った 'rm -rf .git'はその戦略をかなり外傷的にします... – enderland

    答えて

    1

    これは、ドッキングウィンドウとオーバーレイをどうするかなり簡単です:これは読み取り専用ディレクトリからコードをマウントし、/ mntに/ rocodeが読み取り専用であるように、コンテナ内のオーバーレイを作成する必要があります

    docker run --name myenv --privileged -v /my/local/path/tmp/mycode:/mnt/rocode:ro -it ubuntu /bin/bash 
    docker exec -d myenv /sbin/mount -t overlay overlay -o lowerdir=/mnt/rocode,upperdir=/mycode,workdir=/mnt/code-workdir /mycode 
    

    が、/mycodeは書き込み可能です。

    カーネルが3.18以上で、/ proc /ファイルシステムにオーバーレイがあることを確認してください。

    関連する問題