将容器DNS暴露给另一个容器?

时间:2019-05-01 15:29:09

标签: docker docker-compose

使用Docker Compose和Traefik,我试图在本地环境中使应用程序容器与solr容器通信,反之亦然。

当前,我可以在浏览器中正常访问应用程序和solr URL,但是它们内部无法“看到”或彼此对话。

我是Docker的新手。这是我的docker compose文件中包含相关容器的部分:

php:
    image: wodby/drupal-php:$PHP_TAG
    container_name: "${PROJECT_NAME}_php"
    environment:
      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
      DB_HOST: $DB_HOST
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
      DB_DRIVER: $DB_DRIVER
      PHP_FPM_USER: wodby
      PHP_FPM_GROUP: wodby
      COLUMNS: 80 
    volumes:
      - ./:/var/www/html:cached

  solr:
    image: wodby/solr:$SOLR_TAG
    container_name: "${PROJECT_NAME}_solr"
    environment:
      SOLR_DEFAULT_CONFIG_SET: $SOLR_CONFIG_SET
      SOLR_HEAP: 1024m
    labels:
      - 'traefik.backend=${PROJECT_NAME}_solr'
      - 'traefik.port=8983'
      - 'traefik.frontend.rule=Host:solr.${PROJECT_BASE_URL}'


  traefik:
    image: traefik
    container_name: "${PROJECT_NAME}_traefik"
    command: -c /dev/null --web --docker --logLevel=INFO
    ports:
      - '80:80'
      - '8983:8983'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

我可以使用给定的URL访问Solr,但是应用程序无法在相同的URL上看到它。我需要能够做到这一点,以便它可以与Solr交谈并使其爬行/等。

有没有办法公开它们,以便他们可以通过其主机名互相看到?

1 个答案:

答案 0 :(得分:0)

docker-compose内置了容器DNS解析。您可以expose容器上的特定端口以在docker网络中启用访问,也可以定义port(就像对traefik容器所做的那样)在docker网络内部和外部公开它。无论哪种情况,您都可以从另一个容器的暴露端口上按其名称(例如phpsolrtraefik)访问另一个容器。