Передача адресов Docker между контейнерами - PullRequest
0 голосов
/ 12 апреля 2019

Я недавно обнаружил Docker, и я перенес свои сервисы usenet на него. У меня Sonarr, Radarr, NZBget и NZBhydra все работают на Docker, но у меня проблемы с передачей файлов между сервисами. Я использую обратный прокси-сервер nginx для сопоставления с каждым из этих сервисов.

Когда я пытаюсь получить nzb от NZBhydra, он терпит неудачу, потому что пытается сопоставить http://nzbhydra:7891/nzbhydra/foo.nzb?ap=bar,, что явно не удается, потому что http://nzbhydra:7891 не является действительным адресом.

Dockerfile:

FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY default.conf /etc/nginx/conf.d/

default.conf:

server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

        location /sonarr {
            proxy_pass http://sonarr:8989;
        }

        location /radarr {
            proxy_pass http://radarr:8585;
        }

        location /nzbhydra {
            proxy_pass http://nzbhydra:7891;
        }

        location /nzbget {
            proxy_pass http://nzbget:6789;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
}

Я ожидаю, что URL будет сопоставлен с http://localhost:7891/nzbhydra/foo.nzb?ap=bar или http://nzbhydra/nzbhydra/foo.nzb?ap=bar

1 Ответ

0 голосов
/ 12 апреля 2019

Как вы сказали в комментариях к вашему вопросу, вы запускаете свои контейнеры с docker start <hash>. После того, как вы запустите их все, взгляните на docker network ls - эта команда выводит список всех сетей. У вас должно быть столько же сетей, сколько у вас есть контейнеров - потому что docker start создает уникальную (и отдельную) сеть и помещает туда ваш контейнер. Поэтому ты не можешь общаться.

Чтобы исправить это, вы должны поместить свои контейнеры в одну сеть. Для этого вы можете поместить ваши службы в docker-compose.yml и запустить их с docker-compose up. Для этого прочитайте Docker Compose раздел документации.

Или вы можете поместить уже существующие и запущенные контейнеры в одну и ту же сеть вручную. Для этого вы можете использовать docker network connect, например docker network connect <nzbhydra network> <sonarr container>.

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

...