如何在 Docker compose 3 中设置 path.repo?

use*_*084 6 elasticsearch docker docker-compose

我有以下 Docker-compose 3 文件:

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.4
    container_name: elasticsearch
    ...
    ...
    volumes:
      - /path/to/elasticsearch:/usr/share/elasticsearch/data
      - /path/to/elasticsearch/backup:/opt/elasticsearch/backup
    ports:
      - 9200:9200
    networks:
      - elasticnetwork
Run Code Online (Sandbox Code Playgroud)

所以,我已经将我的 path.repo 设置为 /path/to/elasticsearch/backup。但是,运行 curl http://127.0.0.1:9200/_nodes/?pretty 会导致没有 path.repo:

"settings" : {
        ...
        "path" : {
          "logs" : "/usr/share/elasticsearch/logs",
          "home" : "/usr/share/elasticsearch"
        },
        ...
      },
Run Code Online (Sandbox Code Playgroud)

我期待"repo" : ["/opt/elasticsearch/backup"]在路上看到。

Thi*_*lak 11

如文档中所述,您必须path.repoelasticsearch.yml文件中设置。此文件位于/usr/share/elasticsearch/config/图像中的目录中。

因此,您的撰写文件应如下所示:

    version: '3'
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.4
        container_name: elasticsearch
        volumes:
          - elastic-data:/usr/share/elasticsearch/data
          - elastic-backup:/usr/share/elasticsearch/backup
          - ./elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
        ports:
          - 9200:9200
        environment:
          discovery.type: single-node
    volumes:
      elastic-data:
      elastic-backup:
Run Code Online (Sandbox Code Playgroud)

elasticsearch.yml应该有这些:

    cluster.name: "docker-cluster"
    network.host: 0.0.0.0
    
    # minimum_master_nodes need to be explicitly set when bound on a public IP
    # # set to 1 to allow single node clusters
    # # Details: https://github.com/elastic/elasticsearch/pull/17288
    # discovery.zen.minimum_master_nodes: 1
    path.repo: ["/usr/share/elasticsearch/backup"]
Run Code Online (Sandbox Code Playgroud)

启动容器后,我可以repohttp://127.0.0.1:9200/_nodes/?pretty响应中看到:

    "settings" : {
            "cluster" : {
              "name" : "docker-cluster"
            },
            "node" : {
              "name" : "3cUpSf-"
            },
            "path" : {
              "logs" : "/usr/share/elasticsearch/logs",
              "home" : "/usr/share/elasticsearch",
              "repo" : [
                "/usr/share/elasticsearch/backup"
              ]
            },
Run Code Online (Sandbox Code Playgroud)

来自评论:

在此映像中创建了一个名为 elasticsearch 的用户,并且 Elasticsearch 二进制文件在该用户的上下文中运行,而不是 root 用户,因此该用户/opt对容器内的目录没有写权限,但它对/usr/share/elastisearch目录有足够的权限。这就是我在上面的例子中使用这个目录而不是/opt/目录的原因。

  • 我现在正在尝试创建快照,但收到“access_denied_exception”错误:“无法创建 blob 容器”。 (3认同)
  • 即使我的“path.repo”位于“/usr/share/elastisearch”下,我也遇到“access_denied_exception”问题 (2认同)

fla*_*ovs 11

version: "3"
services:
  elasticsearch:
    image: elasticsearch:6.8.2
    environment:
      - 'path.repo=/opt/elasticsearch/backup'
Run Code Online (Sandbox Code Playgroud)

  • 引号确实不是必需的,但为了使这个答案超级完整,值得一提的是重新启动elasticsearch服务是不够的,因为环境仅在`up`命令期间应用。 (4认同)