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 link
function,因此您无需执行任何操作,只需使用主机名即可。
由于你的链接被定义为
links: - elasticsearch
您应该能够在elasticsearch
主机名下访问elasticsearch容器。
如果您从es-sync
容器内部尝试ping elasticsearch
,则应从中parsing并访问主机名。
然后你只需要把它变成一个URL(看起来像你正在寻找): http://elasticsearch:9200/
(假设它运行在端口9200)。