2016-11-18 32 views
1

我是新来泊坞窗,所以也许这是一个基本的问题,但我并没有为它找到一个合适的回答。多克尔 - 撰写:获取链接容器内ADRESS其他容器中(在bash)

我想进去start.sh脚本弹性搜索ADRESS的环境变量。什么是不是侵入性地做到这一点的正确方法,而不是对它进行硬编码?

码头工人组成:

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 [email protected] 
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

由于您使用的泊坞撰写link功能,你不应该有做任何事情,你应该能够使用主机名。

由于你的链接被定义为

links: 
    - elasticsearch 

,你应该能够在elasticsearch主机下达到elasticsearch容器。

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

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

+0

它是这么简单吗?编辑:我试图引用'ES_URI = http:// elasticsearch:9200'并获得'无法建立新的连接:[Errno 111]连接被拒绝从python脚本 – marknorkin

+0

你确定elasticsearch正在端口上运行9200?请验证端口... – nwinkler

+0

,并确定它的启动和运行,当你试图连接?另外网络是最好的联系,但得到它的第一个工作,我猜,在''../../base-config-dev.yml elasticsearch) – johnharris85