2017-10-17 7 views
0

私はドッカーベースのビルド環境を持っています - プロジェクトをビルドするために、--volumeパラメータを持つドッカーコンテナを実行してプロジェクトディレクトリにアクセスし、 。ドッカーコンテナにホストマシンが削除できるファイルを作成する

問題は、コンテナによって作成されたファイルをホストマシンが削除できないことです。私が現在持っている唯一の回避策は、ディレクトリがマウントされたインタラクティブコンテナを起動して削除することです。

ボトムラインの質問:ホストが後でそれらを削除できるように、マウントされたエリアファイルにドッカーに書き込みを許可することは可能ですか?

+0

'-e LOCAL_USER_ID = 'id -u $ USER''が動作するコンテナを実行しますか? – SomethingSomething

答えて

1

これはDockerとはあまり関係がなく、基本的なUnixファイルのアクセス許可とは関係がありません。ドッカーのコンテナはrootとして実行されています。つまり、コンテナによって作成されたファイルは、ホスト上のrootが所有しています。これは、(a)ファイル/ディレクトリがユーザーIDで作成されていることを確認するか、(b)許可されていない場合でもファイルを削除できるようにすることによって、他のファイルアクセス許可の問題を修正する方法で修正します(c)昇格された特権(例えば、sudo rm ...)を使用してファイルを削除してください。

何をしているかによって、オプション(a)が簡単になることがあります。 root以外のユーザー、例えばとしてcontanierを実行することができた場合:

docker run -u $UID -v $HOME/output:/some/container/path ... 

...そしてすべてがちょうどファイルがあなたのユーザーIDを使用して作成されますので、動作します。

コンテナが最初にrootとして実行する必要がある場合、あなたはENTRYPOINTCMDスクリプト内rootアクションの世話をして、メインアプリケーションを実行するために、別のuidに切り替えることができるかもしれません。これを行うには、(環境変数として、例えば)を容器の中に自分のユーザーIDを渡す必要があるでしょうし、後で新しいユーザーIDに切り替えることrunuserようなものを使用する:上記のどちらも場合

exec runuser -u $TARGE_UID /some/command 

オプションである場合、sudo rm -rf mydirectoryは、インタラクティブコンテナを回転させるだけでなく、同様に機能するはずです。

+0

ご連絡ありがとうございました! – SomethingSomething

0

ビルド成果物が次のステージのドッカーイメージに配置されるようにするには、multi-stage buildオプションを使用する価値があります。

関連する問題