阻止容器访问互联网,但仍然有一个端口可以访问

Block container access to internet but still have a port open for access

我正在尝试的是创建一个隔离的容器,但要打开一个端口以供从外部访问。我想保留它,以便容器无法访问互联网。

我有 internal 网络和容器,它们打开了一个端口来访问服务。

示例docker-compose.yml:

version: '3.8'

networks:
  vaultwarden:
    driver: default
    internal: true

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    ports:
      - 8050:80
    stdin_open: true
    tty: true
    volumes:
      - /home/user/password_test:/data/
    environment:
      - WEBSOCKET_ENABLED=true
      - ROCKET_WORKERS=8
    networks:
      - vaultwarden

它似乎工作正常,可以在 localhost:8050 中访问服务,但我无法从容器访问互联网。

我仍然想知道这样做是否正确?

编辑:我正在使用 podman-compose,但在 docker-compose 中,我必须使用 bridge 而不是 default。而且似乎 docker 这个解决方案根本不起作用

某种解决方案是创建一个 reverse-proxy 并将其附加到 internaldriver:bridge 网络。现在,到 vaultwarden 应用程序的流量通过其他网络,而 vaultwarden 本身无法访问互联网。

networks:
  vaultwarden_net_internal:
    internal: true
  vaultwarden_net_outside:
    driver: bridge

services:
  vaultwarden:
    image: vaultwarden/server:latest
    restart: always
    stdin_open: true
    tty: true
    volumes:
      - /home/user/password_test:/data/
    environment:
      - WEBSOCKET_ENABLED=true
      - ROCKET_WORKERS=8
    networks:
      - vaultwarden_net_internal

  proxy:
    build:
      context: ./
      dockerfile: Dockerfile
    restart: always
    stdin_open: true
    tty: true
    networks:
    - vaultwarden_net_internal
    - vaultwarden_net_outside
    ports:
      - 8051:80
    depends_on:
      - vaultwarden