我是Docker的新手,所以也许这是一个基本问题,但是我没有找到合适的答案。
我想在start.sh
脚本中获取作为环境变量的 flex 搜索地址。什么是不做侵入性的,不进行硬编码的正确方法?
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}
最佳答案
由于您使用的是Docker Compose link
功能,因此您无需执行任何操作,您应该可以仅使用主机名。
由于您的链接定义为
links:
- elasticsearch
您应该可以在
elasticsearch
主机名下到达elasticsearch容器。如果您从
ping elasticsearch
容器内部尝试es-sync
,则应解析主机名并从那里访问主机名。然后,您只需要将其转换为URL(看起来像您正在寻找的URL)即可:
http://elasticsearch:9200/
(假设它在端口9200上运行)。
关于docker - Docker-compose:在其他容器内获取链接的容器地址(以bash表示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40672824/