docker - Docker-compose:在其他容器内获取链接的容器地址(以bash表示)

标签 docker sh docker-compose dockerfile

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

我想在start.sh脚本中获取作为环境变量的 flex 搜索地址。什么是不做侵入性的,不进行硬编码的正确方法?

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功能,因此您无需执行任何操作,您应该可以仅使用主机名。

由于您的链接定义为

links:
  - elasticsearch

您应该可以在elasticsearch主机名下到达elasticsearch容器。

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

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

关于docker - Docker-compose:在其他容器内获取链接的容器地址(以bash表示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40672824/

相关文章:

image - Docker是否可以自动重启容器并使用新的镜像标签提交更改?

docker - 如何根据参数从 shell 脚本启动 Docker 容器

macos - 如何在 MacOS 上获取 shell 脚本的绝对路径名?

apache - 我的Docker镜像如何将apache作为服务运行

django - 您将如何在生产环境中运行 Postgres 服务器?

python - python在docker容器中创建目录并写入文件

node.js - Docker - 如何等待容器运行

python - 在 docker-py 中发布到随机端口并返回端口

linux - Sh, awk : how to convert integers, 在 shell 中可见为 16 位低位/大端二进制整数的字符串?

linux - shell脚本中的命令返回