Не могу найти 8080 порт.(Docker, docker-compose) Ошибка - PullRequest
0 голосов
/ 25 сентября 2019

Я думаю, что это проблема с прокси, потому что я все еще могу подключиться к 8380 с помощью домена localhost.Но ошибка другая.

Ошибка: connect ECONNREFUSED 127.0.0.1:8080

Вот мой docker-compose файл.Я установил Docker Overlay Network, но это тоже не помогает.Я думаю, что это проблема прокси.

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 ]

1 голос
/ 25 сентября 2019

По умолчанию Compose настраивает единую сеть для вашего приложения.Каждый контейнер для службы присоединяется к сети по умолчанию и доступен другим контейнерам в этой сети и может быть обнаружен ими с именем хоста, идентичным имени контейнера.

Так что в вашем случае все службы testidpsaml,saml-enabled-reverse-proxy ... будет в одной сети.

И вы можете получить доступ к 1 услуге из другой службы, используя имя хоста в качестве имени службы.

Например: для доступа к службе приложений внутри testidpsaml

http://app:8080/contextpath/apipath

Когда вы определяете порт 8380:8080, это означает, что вы пересылаете 8080 из контейнера на 8380 в хосте.

На хосте будет доступна та же служба приложений, что и

http://app:8380/contextpath/apipath

Пожалуйста, измените свою запись соответственно.

Вы можете узнать больше о Сеть здесь

1 голос
/ 25 сентября 2019

Когда вы определяете ports:- 8380:8080, он публикует testidpsaml порт 8080 на порт хоста 8380.Затем, на хосте докера (не в контейнере), вы можете посетить его с localhost:8380.

Но в сервисе app ваш код работает в контейнере, тогда localhost не означает docker host, но в текущем контейнере вы можете указать заменить localhost на docker host ip, чтобы он работал.

На самом деле, вы также можете напрямую указать имя службы, потому что compose настроит пользовательскийсеть для вас:

Определяемые пользователем мосты обеспечивают автоматическое разрешение DNS между контейнерами.

, в котором имеется внутренний DNS-сервер, который может помочь контейнеру найтиКак быстро, нет необходимости использовать докер-хост для прохождения трафика контейнера.Для вашего случая используйте следующее:

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