Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker compose:获取其他容器中的链接容器地址(在bash中)_Docker_Sh_Docker Compose_Dockerfile - Fatal编程技术网

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

Docker compose:获取其他容器中的链接容器地址(在bash中),docker,sh,docker-compose,dockerfile,Docker,Sh,Docker Compose,Dockerfile,我是docker的新手,所以这可能是一个基本问题,但我没有找到合适的答案 我想在start.sh脚本中获取弹性搜索地址作为环境变量。什么是一个正确的方法来做它,而不是侵略性的,不硬编码它 Docker compose: version: "2" services: #elasticsearch elasticsearch: container_name: es volumes: - ./elasticsearch:/usr/share/elasti

我是docker的新手,所以这可能是一个基本问题,但我没有找到合适的答案

我想在
start.sh
脚本中获取弹性搜索地址作为环境变量。什么是一个正确的方法来做它,而不是侵略性的,不硬编码它

Docker compose:

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
链接
功能,因此不必做任何事情,您应该能够只使用主机名

由于您的链接定义为

links:
  - elasticsearch
您应该能够访问
elasticsearch
hostname下的elasticsearch容器

如果您尝试从
es sync
容器内部执行
ping elasticsearch
,主机名应该在那里解析并可访问


然后您只需将其转换为URL(看起来您正在寻找):
http://elasticsearch:9200/
(假设它在端口9200上运行)。

这么简单吗?编辑:我试图将其称为
ES\u URI=http://elasticsearch:9200
和获取
无法从python脚本建立新连接:[Errno 111]连接被拒绝
您确定elasticsearch正在端口9200上运行吗?请验证端口…当您尝试连接时,是否确定端口已启动并正在运行?此外,网络比链接更可取,但我想先让它工作;)在
。/../base-config-dev.yml
中,elasticsearch具有
端口:-“9200:9200”-“9300:9300”
并且在python文件中,我使用urllib2I调用ES,我认为
urllib2
需要具有架构、主机和端口的精确ip地址。有没有办法通过
elasticsearch
link获得这些信息?编辑:在
start.sh
中,如果我放置
ping-c4 elasticsearch
我可以看到它是可访问的