在容器之间传递Docker URL

时间:2019-04-11 22:00:09

标签: docker nginx nginx-reverse-proxy

我最近发现了Docker,并将其Usenet服务转移到了它。我已经在Docker上运行了声纳,雷达,NZBget和NZBhydra,但是在服务之间传递文件时遇到了问题。我正在使用nginx反向代理来映射到每个服务。

当我尝试从NZBhydra抓取nzb时,它失败了,因为它试图映射到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;
        }
}

我希望该网址映射到http://localhost:7891/nzbhydra/foo.nzb?ap=barhttp://nzbhydra/nzbhydra/foo.nzb?ap=bar

1 个答案:

答案 0 :(得分:0)

正如您在对问题的评论中所说的那样,您使用import tkinter as tk from PIL import Image, ImageTk WIDTH, HEIGHT = 900, 900 topx, topy, botx, boty = 0, 0, 0, 0 rect_id = None path = "Book.jpg" def get_mouse_posn(event): global topy, topx topx, topy = event.x, event.y def update_sel_rect(event): global rect_id global topy, topx, botx, boty botx, boty = event.x, event.y canvas.coords(rect_id, topx, topy, botx, boty) # Update selection rect. window = tk.Tk() window.title("Select Area") window.geometry('%sx%s' % (WIDTH, HEIGHT)) window.configure(background='grey') img = ImageTk.PhotoImage(Image.open(path)) canvas = tk.Canvas(window, width=img.width(), height=img.height(), borderwidth=0, highlightthickness=0) canvas.pack(expand=True) canvas.img = img # Keep reference in case this code is put into a function. canvas.create_image(0, 0, image=img, anchor=tk.NW) # Create selection rectangle (invisible since corner points are equal). rect_id = canvas.create_rectangle(topx, topy, topx, topy, dash=(2,2), fill='', outline='white') canvas.bind('<Button-1>', get_mouse_posn) canvas.bind('<B1-Motion>', update_sel_rect) window.mainloop() 运行容器。 在全部运行它们之后,请查看docker start <hash>-此命令列出了所有网络。您应该拥有与容器相同数量的网络-因为docker network ls创建了一个唯一的(分离的)网络并将容器放置在其中。因此,您无法交流。

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

或者您可以手动将已经存在且正在运行的容器放入同一网络。为此,您可以使用docker network connect,例如docker-compose up

通常,要掌握所有方面,我的回答将非常长,因此,我向您提供了这两个技巧。我希望朝正确的方向轻推就足够了。我强烈建议您阅读文档中的更多内容。