如何在运行官方Elasticsearch docker镜像时设置默认的“弹性”用户密码?

我想通过docker-compose.yml正式的文档build议使用官方的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 up我使用默认密码changeme创build用户elastic 。 正如文件build议我可以更改用户密码通过调用:

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

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

有没有办法在docker-compose up命令中configuration默认​​的elastic用户密码? 也许通过环境variables或通过elasticsearch.ymlconfiguration文件?

我可以在docker.elastic.co/elasticsearch/elasticsearch:5.5.2 image和RUN curl ...命令的顶部创build自己的图像作为相关的Dockerfile的一部分,但是似乎我自己创build了自己的图像版本的Elasticsearch图像只是为了configurationelastic用户密码…

为我工作的解决scheme是将nginx代理容器与基本身份validation放在elasticsearch容器的前面。 Nginx的configuration可能如下所示:

 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包含用户名和encryption的用户密码(甚至可以使用在线服务来生成它,如http://www.htaccesstools.com/htpasswd-generator/ )。

除此之外,您可以购买X-pack / Shield的许可证,并根据需要使用。