容器服务之间怎么通讯?

Linux主机中起了一个 rabbitmq 容器,又起了一个 xxx 服务容器,这个 xxx 怎么连接到 rabbitmq 容器?
因为都是在一台 Linux 中,我在 xxx 服务容器中填写 localhost + 端口貌似不行,把 localhost 改成 内网 ip 就行,比如 (192.168.31.100),但是写死为内网 IP 不行呀,因为内网 IP 会变化

已经设为 network_mode: "host"

docker-compose.yml

version: "3"
services:
    elasticsearch_service:
        container_name: elasticsearch_service
        image: xxx/xxx_service
        network_mode: "host"
        env_file:
            - .env
        command: nameko run services:ElasticsearchService --config ./config.yaml
阅读 4.6k
6 个回答
  1. 把容器里面的端口映射到本机
  2. 使用 —link 参数,连接两个容器
  3. 两个容器放在一个 network 下

标准的docker容器可以把容器的端口和主机端口联系起来,这样其它容器可以访问主机对应端口访问到相应服务。

另外所有容器其实是在同一个局域网段内,如果相互之间知道这个特殊的IP,其实也是可以直接互相访问的,注意从容器的角度看,这个localhost其实是容器分配的特殊IP,和主机的localhost对应的不是同一个东西。

网友一:

图片.png
在web的容器中,比方链接redis直接写程序redis:port即可

网友二:

此类场景 建议用docker-compose 做处理,在同个容器网络下用主机名作为域名即可
跨容器组可以用 docker0 网桥ip 代替内网ip

网友三:

link或者network

新手上路,请多包涵

配置静态子网掩码

新手上路,请多包涵

读取一个网卡的ip是不是就可以了

其实如果在同一个network下,可以直接用容器名进行访问。我感觉你的应用和中间件都容器化的话更适合这种方式;以docker-compose构建ES集群为例,希望对你有帮助;

version: '2.2'
services:
  es01:
    image: elasticsearch:7.10.1
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /usr/es01/node1/data/:/usr/share/elasticsearch/data
      - /usr/es02/node1/plugins:/usr/share/elasticsearch/plugins
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: elasticsearch:7.10.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /usr/es02/node2/data/:/usr/share/elasticsearch/data
      - /usr/es02/node2/plugins:/usr/share/elasticsearch/plugins
    networks:
      - elastic
  es03:
    image: elasticsearch:7.10.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /usr/es03/node3/data/:/usr/share/elasticsearch/data
      - /usr/es03ß/node3/plugins:/usr/share/elasticsearch/plugins
    networks:
      - elastic
  kibana:
    image: kibana:7.10.1
    container_name: kibana
    environment:
      SERVER_NAME: kibana
      ELASTICSEARCH_HOSTS: http://es01:9200
      ELASTICSEARCH_URL: http://es01:9200
    ports:
      - 5601:5601
    # volumes:
    #  - g:/kibana/config:/usr/share/kibana/config
    networks:
      - elastic

  cerebro:
    image: lmenezes/cerebro:latest
    container_name: cerebro
    ports:
      - 9000:9000
    networks:
      - elastic

networks:
  elastic:
    driver: bridge
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题