У меня docker-compose
работает 2 контейнера, каждый со своим сервисом, node
и elasticsearch
.
app. js
...
const isElasticReady = await elastic.checkConnection();
if (isElasticReady) {
const elasticIndex = await elastic.esclient.indices.exists({index:elastic.index});
if (!elasticIndex.body) {
await elastic.createIndex(elastic.index);
await elastic.setMapping();
await data.populateDatabase();
}
}
...
Всякий раз, когда я запускаю docker-compose up
, esclient.indices.exists
всегда возвращает false
, даже если индекс уже существует. В результате я всегда получаю resource_already_exists_exception
.
Странно то, что я использую nodemon
для разработки, и всякий раз, когда я делаю изменения во время разработки, esclient.indices.exists
возвращает true
. Так что проблема возникает только когда я запускаю docker-compose up
. Я подозреваю, что что-то происходит асинхронно, но я не уверен, что.
*docker -compose.yml - depends_on
установлено.
version: '3.6'
services:
api:
image: nodeservice/node:10.15.3-alpine
container_name: nodeservice
build: .
ports:
- 3000:3000
environment:
- NODE_ENV=local
- ES_HOST=elasticsearch
- NODE_PORT=3000
- ELASTIC_URL=http://elasticsearch:9200
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
command: npm run dev
links:
- elasticsearch
depends_on:
- elasticsearch
networks:
- esnet
elasticsearch:
container_name:my_elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
volumes:
- esdata:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
logging:
driver: none
ports:
- 9300:9300
- 9200:9200
networks:
- esnet
volumes:
esdata:
networks:
esnet:
Любые намеки?