我认为这是一个代理问题,因为我仍然可以使用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)
});
答案 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
的更多信息