找不到8080端口。 (Docker,docker-compose)错误

时间:2019-09-25 00:12:45

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

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

  

错误:连接ECONNREFUSED 127.0.0.1:8080

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

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)
});

2 个答案:

答案 0 :(得分:1)

定义ports:- 8380:8080时,它将把testidpsaml的{​​{1}}端口发布到主机的8080端口。然后,在docker主机(不是容器)上,您可以使用8380访问它。

但是,在localhost:8380服务中,您的代码在容器中运行,那么app并不意味着localhost,而是当前容器,您可以指定将docker host替换为您的localhost使其正常工作。

实际上,您也可以直接指定服务名称,因为compose会为您设置a custom network

  

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

其中具有内部dns服务器,可以帮助容器快速找到食人动物,而无需使用docker host来传递流量容器。对于您的情况,请使用next:

docker host ip

答案 1 :(得分:1)

  

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

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

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

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

http://app:8080/contextpath/apipath

定义端口8380:8080时,这意味着要将8080从容器转发到Host中的8380。

相同的应用服务将在主机中以

的形式提供
http://app:8380/contextpath/apipath

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

您可以阅读有关Networking here

的更多信息