我正在从
elasticsearch
运行 docker-compose
,我想将 python
连接到它并测试它。 docker-compose 具有以下形式:
version: '3.2'
services:
elasticsearch:
container_name: elasticsearch
build:
context: elasticsearch/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./elasticsearch/config/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
- type: volume
source: elasticsearch
target: /usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: changeme
links:
- kibana
networks:
- elk
logstash:
container_name: logstash
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./logstash/config/logstash.yml
target: /usr/share/logstash/config/logstash.yml
read_only: true
- type: bind
source: ./logstash/pipeline
target: /usr/share/logstash/pipeline
read_only: true
ports:
- "5000:5000"
- "9600:9600"
expose:
- "5044"
networks:
- elk
depends_on:
- elasticsearch
kibana:
container_name: kibana
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./kibana/config/kibana.yml
target: /usr/share/kibana/config/kibana.yml
read_only: true
ports:
- "5601:5601"
networks:
- elk
app:
container_name: app
build : ./app
volumes:
- ./app/:/usr/src/app
- /usr/src/app/node_modules/ # make node_module empty in container
command: npm start
ports:
- "3000:3000"
networks:
- elk
nginx:
container_name: nginx
build: ./nginx
volumes:
- ./nginx/config:/etc/nginx/conf.d
- ./nginx/log:/var/log/nginx
ports:
- "80:80"
- "443:443"
links:
- app:app
depends_on:
- app
networks:
- elk
filebeat:
container_name: filebeat
build: ./filebeat
entrypoint: "filebeat -e -strict.perms=false"
volumes:
- ./filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml
- ./nginx/log:/var/log/nginx
networks:
- elk
depends_on:
- app
- nginx
- logstash
- elasticsearch
- kibana
links:
- logstash
networks:
elk:
driver: bridge
volumes:
elasticsearch:
我在 jupyter-notebook 中使用这个非常简单的代码来连接到 elasticsearch 并测试它:
from elasticsearch import Elasticsearch
es = Elasticsearch(['http://elasticsearch:9200/'])
if not es.ping():
raise ValueError("Connection failed")
然而,结果是
ValueError: Connection failed
。访问 docker 外部的本地主机是否有问题?
我也尝试过将
elasticsearch
中的localhost
替换为es = Elasticsearch(['http://elasticsearch:9200/'])
,但也失败了。
我找到了一个可用的IP地址,如下所示:
docker inspect image-name
# look for:
"NetworkSettings":
{ "Networks":
{ "IPAddress": IP-THAT-WORKED-WAS-HERE
不幸的是,这个地址发生了变化。
输入“elasticsearch:9200”对我来说也不起作用。
我试图提高人们对这个问题的认识如何设置elasticsearch的容器内ip?