在运行官方Elasticsearch Docker映像时如何设置默认的’elastic’用户密码?

我想通过docker-compose.yml使用官方的Elasticsearch docker image作为官方文档建议:

我简化的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 up之后,我使用默认密码changeme创建了用户elasticbeing.正如documentation所建议的,我可以通过以下方式更改用户密码:

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

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

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

我可以在docker.elastic.co/elasticsearch/elasticsearch:5.5.2映像和RUN curl …命令的顶部创建自己的映像作为包装,作为相关Dockerfile的一部分,但是创建我自己的映像似乎是开销版本的Elasticsearch映像只是为了配置弹性用户密码…

最佳答案
对我有用的解决方案是将具有基本身份验证的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的许可证,然后根据需要使用它.

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...