[英]docker container network access when using vpn
預期結果:
容器可以通過主機名或主機 ip 相互訪問。
實際結果:
使用network_mode 時,我無法對靜態 ip 或其他容器的鏈接進行任何更改。
描述:
我有幾個容器都使用 --net (network_mode) 到 openvpn。 作為單個實例,它們可以使用 nginx 代理,我可以從任何計算機訪問每個實例。
但是,除了本地 ip (172.19.0.x) 之外,容器無法相互找到。 我可以使用它,但是在主機重新啟動時會發生什么。 ip地址會變嗎?
docker-compose.yml
version: '3.4'
services:
vpn:
image: dperson/openvpn-client
container_name: vpn
cap_add:
- net_admin
networks:
- default
tmpfs:
- /tmp
restart: unless-stopped
security_opt:
- label:disable
stdin_open: true
tty: true
volumes:
- ../openvpn:/vpn
- /dev/net:/dev/net:z
environment:
- DNS='8.8.4.4 8.8.8.8'
- FIREWALL="1"
- TZ='Europe/Stockholm'
command: -f ""
networks:
- default
proxy:
image: nginx
container_name: proxy
environment:
TZ: 'Europe/Stockholm'
ports:
- "6003:8989" # sonarr
- "6004:7878" # radarr
- "6001:8112" # deluge
- "6002:9117" # jackett
depends_on:
- sonarr
- radarr
- deluge
- jackett
links:
- vpn:sonarr
- vpn:radarr
- vpn:deluge
- vpn:jackett
networks:
- default
volumes:
- ../nginx/default.conf:/etc/nginx/conf.d/default.conf
restart: always
command: "nginx -g 'daemon off;'"
sonarr:
image: linuxserver/sonarr
container_name: sonarr
volumes:
- ../sonarr:/config
- /etc/localtime:/etc/localtime:ro
- /media/megadrive/Media/Series:/tv
- /media/megadrive/Media/tmp/completed:/downloads
env_file: ../uidgid.env
network_mode: "service:vpn"
environment:
- TZ='Europe/Stockholm'
cap_add:
- net_admin
depends_on:
- vpn
restart: always
radarr:
image: linuxserver/radarr
container_name: radarr
volumes:
- ../radarr:/config
- /media/megadrive/Media/Movies:/movies
- /media/megadrive/Media/tmp/completed:/downloads
- /etc/localtime:/etc/localtime:ro
env_file: ../uidgid.env
network_mode: "service:vpn"
environment:
- TZ='Europe/Stockholm'
cap_add:
- net_admin
depends_on:
- vpn
restart: always
deluge:
image: linuxserver/deluge
container_name: deluge
depends_on:
- vpn
network_mode: "service:vpn"
volumes:
- ../deluge:/config
- /media/megadrive/Media/tmp/:/downloads
- /etc/localtime:/etc/localtime:ro
restart: always
env_file: ../uidgid.env
environment:
- TZ='Europe/Stockholm'
jackett:
container_name: jackett
image: linuxserver/jackett
restart: unless-stopped
network_mode: "service:vpn"
env_file: ../uidgid.env
environment:
- TZ='Europe/Stockholm'
volumes:
- ../jackett:/config
- /media/megadrive/Media/tmp/blackhole:/downloads
networks:
default:
似乎讓 vpn 服務使用主機而不是網橋(默認)。 將解決一些事情。
不再需要 nginx 來代理 webgui
vpn: image: dperson/openvpn-client container_name: vpn cap_add: - net_admin tmpfs: - /tmp restart: unless-stopped security_opt: - label:disable stdin_open: true tty: true volumes: - ../openvpn:/vpn - /dev/net:/dev/net:z environment: - DNS='8.8.4.4 8.8.8.8' - FIREWALL="1" - TZ='Europe/Stockholm' command: -f "" network_mode: "host"
另一種選擇是vpn中的服務使用localhost相互訪問。 由於它們共享 vpn 容器的網絡堆棧,因此可以像訪問同一台主機一樣訪問它們。 這周讓我難住了一段時間。
一條評論,您在所有容器上都有 net_admin,您只需要在 vpn 上使用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.