我已经用docker compose设置了elasticsearch和kibana。 elasticsearch部署在 private void doPhotoPrint() {
if (imageLoader == null) {
imageLoader = new GlideImageLoader(this);
}
if (!IMG_PATH.isEmpty()) {
imageLoader.bindImageAsBitmap(null, FileUtils.validateFileUrl(IMG_PATH), new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
}, new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
Activity activity = ShareImgActivity.this;
if (resource != null && AppUtils.isValidContext(activity)) {
PrintHelper photoPrinter = new PrintHelper(activity);
photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT);
photoPrinter.printBitmap(getString(R.string.app_name) + "_Print", resource);
}
}
}, Priority.IMMEDIATE);
}
}
上,而kibana部署在localhost:9200
当尝试通过docker run部署metricbeat时,出现以下错误:
localhost:5601
我的docker-compose.yml:
$ docker run docker.elastic.co/beats/metricbeat:6.3.2 setup -E setup.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["localhost:9200"]
Exiting: Couldn't connect to any of the configured Elasticsearch hosts. Errors: [Error connection to Elasticsearch http://localhost:9200: Get http://localhost:9200: dial tcp [::1]:9200: connect: cannot assign requested address]
Exiting: Couldn't connect to any of the configured Elasticsearch hosts. Errors: [Error connection to Elasticsearch http://elasticsearch:9200: Get http://elasticsearch:9200: lookup elasticsearch on 192.168.65.1:53: no such host]
答案 0 :(得分:1)
首先通过添加默认Docker网络的名称来编辑docker-compose
文件:
version: "3.7"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
environment:
# - cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elkdata:/usr/share/elasticsearch/data
ports:
- "9200:9200"
networks:
- my-network
restart: always
kibana:
image: docker.elastic.co/kibana/kibana:6.3.2
volumes:
- kibana:/usr/share/kibana/config
ports:
- "5601:5601"
networks:
- my-network
depends_on:
- elasticsearch
restart: always
volumes:
elkdata:
kibana:
networks:
my-network:
name: awesome-name
执行docker-compose up
,然后使用以下命令启动metricbeat
:
$ docker run docker.elastic.co/beats/metricbeat:6.3.2 --network=awesome-name setup -E setup.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["elasticsearch:9200"]
说明:
当您尝试部署metricbeat
时,请提供以下envar:
setup.kibana.host=kibana:5601
output.elasticsearch.hosts=["localhost:9200"]
我将从第二个开始。使用docker run
命令,当您启动metricbeat
时,您告诉容器它可以访问localhost:9200
上的弹性搜索。因此,当容器启动时,它将访问端口9200上的localhost,期望找到运行的elasticsearch
。但是,由于容器是一个具有自己的网络层的主机隔离进程,因此localhost
解析为容器本身,而不是您期望的docker主机。
关于kibana
主机的设置,您首先应该了解docker-compose
的工作方式。默认情况下,执行docker-compose up
时,将创建一个docker网络,并将yml文件上定义的所有服务都添加到该网络。在并且仅网络内,可以通过服务名称访问服务。对于您的情况,按照yml文件中的定义,它们的名称分别为elasticsearch
,kibana
。
因此,为了使metricbeat
容器能够与elasticsearch
和kibana
容器进行通信,应将其添加到同一docker网络。这可以通过在--network
命令上设置docker run
标志来实现。
另一种方法是使用network mode host与您的容器共享Docker主机的网络,但我不建议这样做。
参考文献: