我是码头工的新手,所以也许这是一个基本问题,但我没有找到合适的答案。
我想在start.sh
脚本中将弹性搜索地址作为环境变量。什么是一种正确的方法来进行,而不是有创,不进行硬编码?
Docker撰写:
version: "2"
services:
#elasticsearch
elasticsearch:
container_name: es
volumes:
- ./elasticsearch:/usr/share/elasticsearch/data
extends:
file: ../../base-config-dev.yml
service: elasticsearch
es-sync:
container_name: app-es-sync
hostname: app-es-sync
extends:
file: ../../base-config-dev.yml
service: es-sync
links:
- elasticsearch
Dockerfile:
FROM python:3.4
MAINTAINER me@mail.com
RUN pip install mongo-connector==2.4.1 elastic2-doc-manager
RUN mkdir /opt/es-sync
COPY files/* /opt/es-sync/
RUN chmod 755 /opt/es-sync/start.sh
CMD exec /opt/es-sync/start.sh
start.sh:
#!/bin/sh
cd /opt/es-sync/
export LANG=ru_RU.UTF-8
python3 create_index.py ${ES_URI}
CONNECTOR_CONFIG="\
-m ${MONGO_URI} \
-t ${ES_URI} \
--oplog-ts=oplog.timestamp \
--batch-size=1 \
--verbose \
--continue-on-error \
--stdout \
--namespace-set=foo.bar \
--doc-manager elastic2_doc_manager"
echo "CONNECTOR_CONFIG: $CONNECTOR_CONFIG"
exec mongo-connector ${CONNECTOR_CONFIG}
答案 0 :(得分:2)
由于您使用的是Docker Compose link
功能,因此您不应该做任何事情,您应该只能使用主机名。
由于您的链接定义为
links:
- elasticsearch
您应该能够访问elasticsearch
主机名下的elasticsearch容器。
如果您从ping elasticsearch
容器内部尝试es-sync
,则应解析主机名并从那里可以访问。
然后你只需要把它变成一个URL(看起来你正在寻找它):http://elasticsearch:9200/
(假设它在端口9200上运行)。