gpt4 book ai didi

docker - 从本地主机中另一个容器内的容器访问docker端口

转载 作者:行者123 更新时间:2023-12-02 19:21:02 29 4
gpt4 key购买 nike

我有一个设置,其中我使用docker-compose构建了2个docker。

1个容器是一个Web应用程序。我可以使用8080端口访问它。另一个容器是ElasticSearch;它可以通过9200端口访问。

这是我的docker-compose.yml文件的内容:

version: '3'
services:
serverapplication:
build: "serverapplication"
entrypoint:
- bash
- -x
- init.sh
command: ["jdbcUrl=${jdbcUrl} dbUser=${dbUser} dbUserPassword=${dbUserPassword}"]
ports:
- "8080:8080"
- "8443:8443"
- "8787:8787"
elasticsearch:
build: "elasticsearch"
environment:
- discovery.type=single-node
ports:
- "9200:9200"
- "9300:9300"

当我浏览到 http://localhost:8080/serverapplication时,可以看到我的服务器应用程序。
当我浏览至 http://localhost:9200/时,我可以看到ElasticSearch的默认页面。

但是,当我尝试从服务器应用程序内部访问ElasticSearch时,出现“连接被拒绝”的情况。对于服务器应用程序,localhost上的 9200端口似乎无法访问。

我怎样才能解决这个问题?

最佳答案

使用localhost永远都不安全,因为localhost对于您的主机系统,elasticsearch和您的服务器应用程序意味着其他含义。您只能从主机的本地主机访问容器,因为您正在将容器端口映射到主机的端口。

  • 将它们放在同一网络中
  • 为容器命名
  • 通过其容器名访问elasticsearch,Docker会自动将其解析为您的Elasticsearch容器的当前IP。

  • 代码:
    version: '3'
    services:
    serverapplication:
    container_name: serverapplication
    build: "serverapplication"
    entrypoint:
    - bash
    - -x
    - init.sh
    command: ["jdbcUrl=${jdbcUrl} dbUser=${dbUser} dbUserPassword=${dbUserPassword}"]
    ports:
    - "8080:8080"
    - "8443:8443"
    - "8787:8787"
    networks:
    - my-network

    elasticsearch:
    container_name: elasticsearch
    build: "elasticsearch"
    environment:
    - discovery.type=single-node
    ports:
    - "9200:9200"
    - "9300:9300"
    networks:
    - my-network

    networks:
    my-network:
    driver: bridge

    关于docker - 从本地主机中另一个容器内的容器访问docker端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59754843/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com