如何防止两个单独的 docker-compose 之间发生冲突

How to prevent conflict between two separate docker-compose

我在两个单独的文件夹中有两个单独的项目。 当我 运行 其中之一时,第二个不能 运行 因为端口之间存在冲突。

问题出在 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 容器,但它没有显示其端口。
我该如何解决这个问题?

更新
问题是在这种情况下,我的网络应用程序(django-base)无法连接到第二个弹性搜索实例。

此外,当我在第二个 docker-compose 中为 ES 更改端口号时(例如添加 9500 作为 Expose),ES 的端口号再次是默认端口号(9200、9300)加上我的新端口 (9500) 和我的 Web 应用程序无法连接到其中的 none。

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

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