【发布时间】:2022-03-03 14:01:02
【问题描述】:
我在两个单独的文件夹中有两个单独的项目。 当我运行其中一个时,由于端口之间的冲突,第二个无法运行。
问题在于 ElasticSearch 图像。 以下是两个 docker-compose 文件:
# /home/foder_1/
version: '3'
services:
elasticsearch_ci:
image: elasticsearch:7.14.2
restart: always
expose:
- 9200
environment:
- discovery.type=single-node
- xpack.security.enabled=false
env_file:
- ./envs/ci.env
container_name: elasticsearch_ci_pipeline
第二个:
# /home/folder_2/
version: '3'
services:
elasticsearch:
image: elasticsearch:7.14.2
expose:
- 9200
volumes:
- elastic_search_data_staging:/var/lib/elastic_search/data/
environment:
- discovery.type=single-node
- xpack.security.enabled=false
当我运行docker ps 时,我看到创建了第二个 ElasticSearch 容器,但它没有显示其端口。
我该如何解决这个问题?
更新:
问题是在这种情况下,我的 Web 应用程序(django-base)无法连接到第二个弹性搜索实例。
另外,当我在第二个 docker-compose 中为 ES 更改端口号时(例如添加 9500 作为 Expose),ES 的端口号再次是默认端口(9200、9300)加上我的新端口(9500)我的网络应用程序无法连接到它们。
【问题讨论】:
-
您会收到什么错误消息(如果有)? 'expose' 不会将端口映射到主机端口,因此不应该有任何冲突。
-
所以您在
/home/foder_1/docker-compose.yml和/home/foder_2/docker-compose.yml中有一个Django 应用程序,并且您希望folder_1的Django 应用程序连接到folder_2上的ES?这是不可能的。正如我所说,他们有自己的网络。同一项目的服务之间可以相互通信。 -
@hup 不,我想将 django_1 连接到 ES_1,将 django_2 连接到 ES_2。问题是运行 folder_1 的 docker-compose 时,folder_2 的 docker-compose 无法运行。 ES_1 和 ES_2 在 9200,9300 端口上有冲突。
-
我明白了!然后,很奇怪,没有发布 ES 端口会发生冲突。我建议在您的撰写文件中查看您的 Django 配置和该服务的已发布端口。
-
只是备注,与您的问题无关,
elasticsearch:7.14.2易受 Log4Shell CVE 攻击。
标签: docker elasticsearch docker-compose docker-container