gpt4 book ai didi

docker 撰写 : Expose not working

转载 作者:行者123 更新时间:2023-12-02 06:13:43 27 4
gpt4 key购买 nike

docker -ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                NAMES
83b1503d2e7c app_nginx "nginx -g 'daemon ..." 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp app_nginx_1
c9dd2231e554 app_web "/home/start.sh" 2 hours ago Up 2 hours 8000/tcp app_web_1
baad0fb1fabf app_gremlin "/start.sh" 2 hours ago Up 2 hours 8182/tcp app_gremlin_1
b663a5f026bc postgres:9.5.1 "docker-entrypoint..." 25 hours ago Up 2 hours 5432/tcp app_db_1

他们都工作正常:
  • app_nginx 与 app_web 连接良好
  • app_web 与 postgres 连接良好

  • 没有工作文件:
  • app_web 无法连接 app_gremlin

  • docker-compose.yaml
    version: '3'
    services:
    db:
    image: postgres:9.5.12
    web:
    build: .
    expose:
    - "8000"
    depends_on:
    - gremlin
    command: /home/start.sh
    nginx:
    build: ./nginx
    links:
    - web
    ports:
    - "80:80"
    command: nginx -g 'daemon off;'
    gremlin:
    build: ./gremlin
    expose:
    - "8182"
    command: /start.sh

    错误:

    基本上我无法连接到 gremlin来自我的 app_web 的容器容器。

    以下所有内容均在 web_app 内执行容器

    curl :
    root@49a8f08a7b82:/# curl 0.0.0.0:8182
    curl: (7) Failed to connect to 0.0.0.0 port 8182: Connection refused

    网络统计
    root@49a8f08a7b82:/# netstat -l
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 127.0.0.11:42681 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
    udp 0 0 127.0.0.11:54232 0.0.0.0:*
    Active UNIX domain sockets (only servers)
    Proto RefCnt Flags Type State I-Node Path

    map
    root@49a8f08a7b82:/# nmap -p 8182 0.0.0.0

    Starting Nmap 7.60 ( https://nmap.org ) at 2018-06-22 09:28 UTC
    Nmap scan report for 0.0.0.0
    Host is up.

    PORT STATE SERVICE
    8182/tcp filtered vmware-fdm

    Nmap done: 1 IP address (1 host up) scanned in 2.19 seconds

    nslookup

    root@88626de0c056:/# nslookup app_gremlin_1
    服务器:127.0.0.11
    地址:127.0.0.11#53

    非权威答案:
    名称:app_gremlin_1
    地址:172.19.0.3

    实验:

    对于我做的 Gremlin 容器,
    ports:
    - "8182:8182"

    然后从 Host我可以连接到 gremlin容器 但是 web 之间仍然没有联系和 gremlin容器

    我正在创建一个重新创建示例 Docker 文件(重新创建问题的最少内容),同时任何人都知道问题可能是什么?

    最佳答案

    curl 0.0.0.0:8182

    0.0.0.0 地址是一个通配符,它​​告诉应用程序监听所有网络接口(interface),您不要作为客户端连接到该接口(interface)。对于容器到容器的通信,您需要:
  • 同一用户生成网络上的容器(compose 默认为您执行此操作)
  • 连接到服务的名称(或容器名称)
  • 连接到另一个容器内的端口,而不是发布的端口。

  • 在您的情况下,命令应该是:
    curl http://gremlin:8182

    网络是在容器内运行的应用程序中命名的,因此每个容器都可以在桥接网络上获得它的开放环回接口(interface)和 IP 地址。因此,将应用程序移入容器意味着您需要监听 0.0.0.0 并使用 DNS 连接到网桥 ip。

    您还应该从 Dockerfile 中删除链接和依赖项,它们不适用于版本 3。链接早已被弃用以支持共享网络。而且depends_on 在swarm 模式下不起作用,并且可能没有做你想做的事情,因为它从来没有检查过目标应用程序是否正在运行,只有那个容器的启动才被启动。

    最后一点,expose 不会影响公共(public)网络上的容器之间的通信或主机上发布端口的能力。 Expose 只是在图像上设置元数据,即创建图像的人和运行图像的人之间的文档。应用程序不需要使用该值,但为了下游用户的利益,让您的应用程序默认使用该值是一个好习惯。由于它的作用,除非您有另一个应用程序检查公开的端口列表,例如自我更新的反向代理,否则无需在 compose 文件中公开端口,除非您将 compose 文件提供给另一个人并且他们需要文档。

    关于 docker 撰写 : Expose not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50984440/

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