使用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交谈并让它爬行等。
有没有办法揭露他们,以便他们可以通过他们的主机名看到对方?
docker-compose
内置了容器DNS解析。您可以expose
容器上的特定端口以启用docker网络内的访问,或者定义port
(就像您为traefik容器所做的那样)以在docker网络内部和外部公开它。在任何一种情况下,您都可以通过其名称(例如,在这种情况下为php
,solr
或traefik
)从另一个容器访问另一个容器。