web-dev-qa-db-ja.com

ホスト上のdockerボリュームをchownします(おそらくdocker-composeを介して)

私は次の例を持っています

version: '2'

services:
  proxy:
    container_name: proxy
    hostname: proxy
    image: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - proxy_conf:/etc/nginx
      - proxy_htdocs:/usr/share/nginx/html

volumes:
  proxy_conf: {}
  proxy_htdocs: {}

これは正常に動作します。 docker-compose upを実行すると、/var/lib/docker/volumesに名前付きボリュームが作成され、すべて問題ありません。ただし、ホストからは、ルートとして/var/lib/dockerにしかアクセスできません。これは、root:rootであるためです(意味があります)。ホストのディレクトリをより賢明で安全なもの(たとえば、ホスト上でほとんどのことを行うために使用する比較的特権のないユーザー)にchownする方法があるのか​​、それとも単にそれを吸う必要があるのか​​疑問に思いました。手動でアップしてchownします。他の問題を回避するためのスクリプトがすでにいくつかあるようになっているので、数行余分に追加してもそれほど問題にはなりませんが、自分で作成した自動化を最小限に抑えたいと思っています。できます-愚かな間違いの可能性が少なくなります。

ちなみに、いいえ。ボリュームを作成する代わりにホストディレクトリをマウントすると、それらはオーバーレイされます。つまり、空で開始すると空のままになり、コンテナ内からデフォルトの構成(またはその他)を取得できません。

追加のポイント:ボリュームをより便利な場所に移動できますか?言う、/home/myuser/myserverstuff/volumes

6
Morpheu5

/var/lib/docker内のファイルに直接アクセスしようとしないことをお勧めします。これらのディレクトリは、dockerデーモンによって管理されることを目的としており、混乱することはありません。

ボリューム内のデータにアクセスするには、いくつかのオプションがあります。

  • バインドマウントされたディレクトリを使用します(それを考慮しましたが、ユースケースに適合しませんでした)。
  • 同じボリュームを使用し、そのコンテナを介してアクセスできるようにする「サービス」コンテナを使用します。たとえば、sshを実行しているコンテナ(scpを使用する場合)またはSAMBAコンテナ( svendowideit/samba
  • volume-driverプラグイン を使用します。あらゆる種類のオプションを提供するさまざまなプラグインがあります。たとえば、 ローカル永続プラグイン は、wheredockerを指定できる非常にシンプルなプラグインです。ボリュームデータを保存する必要があります(したがって、/var/lib/dockerの外部)
19
thaJeztah