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

时间:2016-11-18 08:53:01

标签: docker sh docker-compose dockerfile

我是码头工的新手,所以也许这是一个基本问题,但我没有找到合适的答案。

我想在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}

1 个答案:

答案 0 :(得分:2)

由于您使用的是Docker Compose link功能,因此您不应该做任何事情,您应该只能使用主机名。

由于您的链接定义为

links:
  - elasticsearch

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

如果您从ping elasticsearch容器内部尝试es-sync,则应解析主机名并从那里可以访问。

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