web-dev-qa-db-ja.com

Dockerがappフォルダーのelasticsearchボリュームをバインドする

次のdocker-composeファイルがあります。

version: "3.3"
services:    
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    environment:
      - bootstrap.memory_lock=true
      - "ES_Java_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    ports:
      - "9300:9300"
      - "9200:9200"

volumes:
  esdata:

(明確にするために他のサービスを削除しました)/ var/lib/docker/volumes /project_name_ esdataでボリュームを確認できますが、できるようにしたいと思いますdocker-compose.ymlがあるディレクトリにボリュームを作成しますが、それを行う方法が見つかりませんでした。

docker-compose.ymlの名前付きボリュームのホスト上のパスを設定する方法 からヒントを得て、試しました

version: "3.3"
services:    
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    environment:
      - bootstrap.memory_lock=true
      - "ES_Java_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    ports:
      - "9300:9300"
      - "9200:9200"

volumes:
  esdata:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: './' 

ただし、次の例外が発生します。

Caused by: Java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes 

完全なスタックトレースやその他の関連情報を投稿する必要があるかどうかをお知らせください。

6
L. Faros

設定はほぼ問題ありませんが、device: ./が現在のディレクトリではなくルートファイルシステムのマウントを引き起こしているため、絶対パスを使用する必要があります(そのため、アクセスが拒否されました)

device: /opt/your-project/dataなどのデバイスでは絶対パスを使用してください-使用する前にディレクトリが存在している必要があります。

0
Jakub Bujny