Docker compose:获取其他容器中的链接容器地址(在bash中)
我是docker的新手,所以这可能是一个基本问题,但我没有找到合适的答案 我想在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
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
我可以看到它是可访问的