Docker-compose:在其他容器中获取链接的容器地址(在bash中)

我是docker工人,所以也许这是一个基本的问题,但我没有find适当的答案。

我想在start.sh脚本中获得作为环境variables的弹性search地址。 什么是正确的方式做不是侵入性的,不硬编码?

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 linkfunction,因此您无需执行任何操作,只需使用主机名即可。

由于你的链接被定义为

 links: - elasticsearch 

您应该能够在elasticsearch主机名下访问elasticsearch容器。

如果您从es-sync容器内部尝试ping elasticsearch ,则应从中parsing并访问主机名。

然后你只需要把它变成一个URL(看起来像你正在寻找): http://elasticsearch:9200/ (假设它运行在端口9200)。