Docker,运行多个容器(elasticsearch)
我正在和你一起做一个elasticsearchDocker,运行多个容器(elasticsearch),docker,elasticsearch,docker-compose,Docker,elasticsearch,Docker Compose,我正在和你一起做一个elasticsearch version: '3' services: elasticsearch: build: context: . dockerfile: ./compose/elasticsearch/Dockerfile args: - VERSION=${VERSION} - MEM=${MEM} - ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT_DEV}
version: '3'
services:
elasticsearch:
build:
context: .
dockerfile: ./compose/elasticsearch/Dockerfile
args:
- VERSION=${VERSION}
- MEM=${MEM}
- ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT_DEV}
- CLUSTER_NAME=${CLUSTER_NAME_DEV}
- ENV=${ENV_DEV}
container_name: elasticsearch
network_mode: host
environment:
- discovery.type=single-node
volumes:
- /var/lib/elasticsearch:/usr/share/elasticsearch/data
logstash:
build:
context: .
dockerfile: ./compose/logstash/Dockerfile
args:
- VERSION=${VERSION}
- ELASTICSEARCH_HOST=${ELASTICSEARCH_HOST_DEV}
- ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT_DEV}
- DB_HOST=${DB_HOST_DEV}
- DB_NAME=${DB_NAME_DEV}
- ENV=${ENV_DEV}
container_name: logstash
network_mode: host
volumes:
- /opt/logstash/data:/usr/share/logstash/data
dns:
- 192.168.1.1 # IP necessary to connect to a database instance external to where the server in which the container is running
kibana:
build:
context: .
dockerfile: ./compose/kibana/Dockerfile
args:
- VERSION=${VERSION}
- ELASTICSEARCH_HOST=${ELASTICSEARCH_HOST_DEV}
- ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT_DEV}
container_name: kibana
depends_on:
- elasticsearch
network_mode: host
nginx:
build:
context: .
dockerfile: ./compose/nginx/Dockerfile
args:
- KIBANA_HOST=${KIBANA_HOST_DEV}
- KIBANA_PORT=${KIBANA_PORT_DEV}
container_name: nginx
network_mode: host
depends_on:
- kibana
apm:
build:
context: .
dockerfile: ./compose/apm/Dockerfile
args:
- VERSION=${VERSION}
- ELASTICSEARCH_HOST=${ELASTICSEARCH_HOST_DEV}
- ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT_DEV}
- APM_PORT=${APM_PORT_DEV}
container_name: apm
depends_on:
- elasticsearch
network_mode: host
(我认为,当容器访问/usr/share/elasticsearch/data
时,这个应用程序使用主机的/var/lib/elasticsearch
,并且数据被保存在主机的/var/lib/elasticsearch
中)
另一个有
version: '3'
services:
elasticsearch-search:
restart: always
build:
context: .
dockerfile: ./compose/elasticsearch/Dockerfile
args:
- VERSION=${VERSION}
- ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT_SEARCH_DEV}
- MEM=${MEM_SEARCH}
- CLUSTER_NAME=${CLUSTER_NAME_SEARCH_DEV}
- ENV=${ENV_DEV}
container_name: elasticsearch-search
network_mode: host
environment:
- discovery.type=single-node
volumes:
- /etc/localtime:/etc/localtime:ro
- data:/usr/share/elasticsearch/data
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
kibana:
build:
context: .
dockerfile: ./compose/kibana/Dockerfile
args:
- VERSION=${VERSION}
- ELASTICSEARCH_HOST=${ELASTICSEARCH_HOST_SEARCH_DEV}
- ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT_SEARCH_DEV}
container_name: kibana-search
depends_on:
- elasticsearch-search
network_mode: host
volumes:
- /etc/localtime:/etc/localtime:ro
- data:/usr/share/elasticsearch/data
volumes:
data:
(我不知道这是怎么回事,但我想docker提供了持久存储,可以通过容器中的/usr/share/elasticsearch/data
访问)
当我同时运行它们时,我希望两个elasticsearch使用单独的数据。但他们似乎在互相干扰
我有一个kibana跑步,它看起来像是第一次跑步
当我单独运行第一个ES时,我可以看到数据,但只要运行第二个ES,就什么都没有,没有索引模式,没有仪表板
我误解了什么
环境署署长
您的docker compose在
卷:
部分方面很可能有问题
第二个例子的顶部有这个
volumes:
- data:/usr/share/elasticsearch/data
下面是:
volumes:
- /etc/localtime:/etc/localtime:ro
- data:/usr/share/elasticsearch/data
这意味着至少有两个单独的容器绑定到同一本地文件夹data
。这无疑是看到奇怪事物的一种方式,因为这些容器中的某些东西(ES就是其中之一)将尝试在hostsdata
文件夹中重新创建数据存储层次结构
您可以尝试将第一个ES的卷定义为:
volumes:
- ./data/es1:/usr/share/elasticsearch/data
第二个是:
volumes:
- ./data/es2:/usr/share/elasticsearch/data
只需确保主机上有/data/es1
和/data/es2
文件夹,然后再执行docker compose up
或者你可以发布整个
docker compose.yml
文件,这样我们就可以知道它有什么问题了…你能提供这两种情况下你的compose文件的全部内容,以及你如何知道它们在干扰吗?@optsteresninja Amit我添加了compose文件,为什么我认为他们会在第二个文件中插入,应该有一个顶级的卷:
部分,其中包含数据:
块;这对问题很重要。@DavidMaze哦,是的,我的撰写文件中有它,在复制它时遗漏了这一部分。在第二个示例中,您将数据存储在命名卷中,您希望数据如何进入其中?(看起来您看到了您所期望的,两个ES安装的数据存储彼此隔离。)我修复了操作。。顶部的卷:
是docker compose的片段摘要,如下所示。在这种情况下,elasticsearch
服务和elasticsearch
在驱动器上没有冲突。它们应该同时工作,很好。(假设您的项目不位于/var/lib/elasticsearch
内部,这就是为什么我建议第二个也使用完整路径,而不是数据
)此外,我看不到您正在公开端口“```端口:-27017:27017```这应该是第二个主机的不同端口。否则它将无法启动…抱歉,ES端口是端口:-9200:9200
我复制了完整的docker compose。。对不起,我应该早点完成。现在我明白了,顶层的卷被设计成多个服务中的公共位置。因此,您有两个选项1)-将两个卷定义为dataes1
和dataes2
,并更改您的服务以使用它们。或2)-装载2个主机独立路径,而不是定义的loume数据
volumes:
- ./data/es2:/usr/share/elasticsearch/data