Доступ к контейнеру Docker с привязкой порта за контейнером Wireguard

Короче говоря, у меня нет статического IP-адреса от моего интернет-провайдера, тогда мне приходит идея создать свой собственный VPN-сервер с использованием образа Raspberry Pi 4, Raspbian и linuxserver.io wireguard. Затем за этими VPN стоит скрипт Nextcloud. До сих пор я делал это с docker-compose.yaml, но возвращал ошибку:

version: '3.7'

services:
  wireguard:
    privileged: true
    image: ghcr.io/linuxserver/wireguard
    container_name: wireguard
    restart: unless-stopped
    networks:
      - backbone
    volumes:
      - './wireguard/config:/config'
      - '/lib/modules:/lib/modules'
    environment:
      - PUID=1000
      - PGID=1000
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv6.conf.all.disable_ipv6=0

  nextcloud:
    privileged: true
    depends_on:
      - wireguard
    image: ghcr.io/linuxserver/nextcloud
    container_name: nextcloud
    network_mode: service:wireguard
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - ./nextcloud/config:/config
      - ./nextcloud/data:/data
    ports:
      - 8080:80

networks:
  backbone:
    driver: bridge

Я хочу, чтобы мой веб-интерфейс nextcloud был доступен извне с моим IP-адресом VPN, когда я захожу на http://my.vpn.ip:8080

Я добавляю строку network_mode: service:wireguard в свой файл docker-compose.yaml, поэтому контейнер nextcloud будет в той же сети, что и контейнер wireguard. Но, похоже, он не работает с открытым портом 8080:80, который я уже настроил. Когда я запустил docker-compose up -d, он вернулся с выводом ошибки следующим образом:

ERROR: for nextcloud  Cannot create container for service nextcloud: conflicting options: port publishing and the container type network mode
ERROR: Encountered errors while bringing up the project.

Буду очень признателен, если кто-то поможет мне в этом. Спасибо.


person Beny Hirmansyah    schedule 05.12.2020    source источник


Ответы (1)


вам необходимо настроить переадресацию портов в контейнере wireguard в соответствии со стандартным портом образа nextcloud. В данном случае 8080:80 и 443:443. Пример:

version: '3.7'

services:
  wireguard:
    privileged: true
    image: ghcr.io/linuxserver/wireguard
    container_name: wireguard
    restart: unless-stopped
    networks:
      - backbone
    volumes:
      - './wireguard/config:/config'
      - '/lib/modules:/lib/modules'
    environment:
      - PUID=1000
      - PGID=1000
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    ports:
      - 8080:80 #nextcloud https webgui
      - 443:443 #nextcloud http webgui
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv6.conf.all.disable_ipv6=0

  nextcloud:
    privileged: true
    depends_on:
      - wireguard
    image: ghcr.io/linuxserver/nextcloud
    container_name: nextcloud
    network_mode: service:wireguard
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - ./nextcloud/config:/config
      - ./nextcloud/data:/data


networks:
  backbone:
    driver: bridge

person Menon Marco    schedule 19.12.2020
comment
о да. Вместо этого я должен поместить эти настройки порта в контейнер wireguard, спасибо! - person Beny Hirmansyah; 21.12.2020