【问题标题】:How to prevent conflict between two separate docker-compose如何防止两个单独的 docker-compose 之间发生冲突
【发布时间】: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


【解决方案1】:

我终于找到了问题所在。
我的服务器只有 4 GB 的 RAM,当一个 elasticsearch 正在运行时,其他 elasticsearch 实例无法启动,因为第一个实例消耗了大部分 RAM。

如果您想运行两个单独的 elasticsearch 实例,您应该考虑每个实例至少 6 GB 的 RAM。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2019-05-07
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    相关资源
    最近更新 更多