【问题标题】:Can't find 8080 port. (Docker, docker-compose) Error找不到 8080 端口。 (Docker, docker-compose) 错误
【发布时间】:2019-09-25 00:12:45
【问题描述】:

我认为这是一个代理问题,因为我仍然可以使用 localhost 域连接到 8380。但是错误是不同的。

错误:连接 ECONNREFUSED 127.0.0.1:8080

这是我的 docker-compose 文件。我设置了 docker 覆盖网络,但它也无济于事。我认为这是代理问题。

version: '3'

services:
    testidpsaml:
        image: kristophjunge/test-saml-idp
        environment:
            - SIMPLESAMLPHP_SP_ENTITY_ID=urn:asdasd
            - SIMPLESAMLPHP_SP_ASSERTION_CONSUMER_SERVICE=http://localhost:8446/login/callback
        ports:
            - 8380:8080
            - 8333:8443
    saml-enabled-reverse-proxy:
        build: ./saml-enabled-reverse-proxy
        ports:
            - 8446:8446
        networks:
            - my_net
    app:
        build: ./adssa
        volumes:
            - /Users/jbaek:/asd/src
        ports:
            - 8080:8080
        networks:
            - my_net

networks:
    my_net:

在应用中,,,

...

var samlStrategy = new saml.Strategy({
// config options here
    callbackUrl: 'http://localhost:8446/login/callback', //we don't use this?
    // 8380 WORKS? WHY? WHY I CAN'T Connect 
    entryPoint: 'http://localhost:8380/simplesaml/saml2/idp/SSOService.php', 
    ...
app.get('/',
    function(req, res) {
        apiProxy.web(req, res, {target: serviceProvider});
    }
);
...

var server = app.listen(8446, function () {
    console.log('Listening on port %d', server.address().port)
});

【问题讨论】:

    标签: node.js docker docker-compose dockerfile docker-swarm


    【解决方案1】:

    默认情况下,Compose 会为您的应用设置一个网络。每个 服务的容器加入默认网络,并且两者都是 该网络上的其他容器可以访问,并且可以被该网络上的其他容器发现 它们的主机名与容器名称相同。

    因此,在您的情况下,所有服务 testidpsaml,saml-enabled-reverse-proxy ... 都将位于单个网络上。

    您可以使用主机名作为服务名从另一个服务访问一项服务。

    例如:在 testidpsaml 中访问您的应用服务

    http://app:8080/contextpath/apipath
    

    当您定义端口8380:8080 时,这意味着您将8080 从容器转发到主机中的8380。

    主机中将提供与

    相同的应用服务
    http://app:8380/contextpath/apipath
    

    请相应地更改您的入口点。

    你可以阅读更多关于Networking here的信息

    【讨论】:

      【解决方案2】:

      当你定义ports:- 8380:8080时,它会将testidpsaml8080端口发布到主机的8380端口。然后,在 docker 主机(不是容器)上,您可以使用 localhost:8380 访问它。

      但是,在app 服务中,您的代码在容器中运行,那么localhost 不是指docker host,而是当前容器,您可以指定将localhost 替换为您的docker host ip 以使其工作.

      其实你也可以直接指定服务名,因为compose会为你设置a custom network

      用户定义的网桥提供容器之间的自动 DNS 解析。

      它有一个内部的dns服务器,可以帮助容器快速找到athother,无需使用docker主机来传递流量容器。对于您的情况,请使用下一个:

      entryPoint: 'http://testidpsaml:8080/simplesaml/saml2/idp/SSOService.php'
      

      【讨论】:

        猜你喜欢
        • 2017-06-05
        • 1970-01-01
        • 2019-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        • 2021-11-24
        相关资源
        最近更新 更多