在容器之间传递 docker 个 URL

Passing docker URLs between containers

我最近发现 Docker 并且我正在将我的 usenet 服务转移到它上面。我在 Docker 上有 sonarr、radarr、NZBget 和 NZBhydra 全部 运行,但我在服务之间传递文件时遇到问题。我正在使用 nginx 反向代理映射到这些服务中的每一个。

当我尝试从 NZBhydra 获取 nzb 时,它失败了,因为它试图映射到 http://nzbhydra:7891/nzbhydra/foo.nzb?ap=bar, which is obviously failing because http://nzbhydra:7891 不是有效地址。

Docker文件:

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 or http://nzbhydra/nzbhydra/foo.nzb?ap=bar

正如您在问题的评论中所说,您 运行 您的容器 docker start <hash>。 在你 运行 所有这些之后,看看 docker network ls - 这个命令列出了所有网络。您应该拥有与容器数量相同的网络 - 因为 docker start 创建了一个独特的(且分离的)网络并将您的容器放在那里。所以无法交流。

要解决这个问题,您必须将您的容器放在一个网络中。为此,您可以将您的服务放入 docker-compose.yml 并使用 docker-compose up 放入 运行。为此,请阅读文档的 Docker Compose 部分。

或者您可以手动将现有容器和 运行ning 容器放到同一个网络上。为此,您可以使用 docker network connect,例如 docker network connect <nzbhydra network> <sonarr container>.

一般来说,要掌握所有方面,我的回答会非常长,因此我为您提供这两个提示。我希望这足以推动正确的方向。我强烈建议您阅读更多文档。