使用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交谈并使其爬行/等。
有没有办法公开它们,以便他们可以通过其主机名互相看到?
答案 0 :(得分:0)
docker-compose
内置了容器DNS解析。您可以expose
容器上的特定端口以在docker网络中启用访问,也可以定义port
(就像对traefik容器所做的那样)在docker网络内部和外部公开它。无论哪种情况,您都可以从另一个容器的暴露端口上按其名称(例如php
,solr
或traefik
)访问另一个容器。