3

正如官方文档建议的那样,我想通过docker-compose.yml使用官方的Elasticsearch docker 镜像:

我简化的 docker-compose.yml如下所示:

version: '2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.5.2
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - 9200:9200

默认情况下,运行后docker-compose upelastic使用默认密码创建用户changeme。正如文档所暗示的,我可以通过调用来更改用户密码:

curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/elastic/_password' -H "Content-Type: application/json" -d '{
  "password" : "elasticpassword"
}'

但这在运行 Docker 映像时需要额外的步骤。

有没有办法在命令elastic期间配置默认用户密码docker-compose up?也许通过环境变量以某种方式或通过elasticsearch.yml配置文件?

我可以创建自己的图像作为docker.elastic.co/elasticsearch/elasticsearch:5.5.2图像顶部的包装器,并将命令作为相关 Dockerfile 的一部分,但是创建自己的 Elasticsearch 图像版本只是为了配置用户密码RUN curl ...对我来说似乎是开销......elastic

4

1 回答 1

3

对我有用的解决方案是将具有基本身份验证的nginx代理容器放在elasticsearch容器前面。Nginx 配置可能类似于:

upstream elasticsearch {
    server elasticsearch:9200;
}

server {
    listen 80;
    server_name server.name.com;

    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;

    location / {
        proxy_pass http://elasticsearch;
        proxy_redirect off;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
    }
}

其中 .htpasswd 包含用户名和加密的用户密码(您甚至可以使用在线服务来生成它,例如http://www.htaccesstools.com/htpasswd-generator/)。

除此之外,如果您愿意,您可以购买X-pack/Shield的许可证并使用它。

于 2017-10-05T08:32:12.730 回答