Docker Compose - 限制对某些容器的服务访问并禁用来自外部 docker 的访问

Adi*_*lik 3 docker docker-compose

我有四项服务service1, service2, service3, postgres。每一个都通过某个端口暴露。我想要的是postgres服务只能从 docker 容器访问,而不是通过psql命令从虚拟机访问(禁用从外部 docker 访问)。

这是我的 docker-compose.local.yml

version: '3'
services:
  postgres:
    container_name: postgres
    image: registry.domain.com/postgres-multi:9.5
    restart: unless-stopped
    ports:
      - "5432:5432"
    environment:
      LC_ALL: C.UTF-8
      POSTGRES_USER: postgres
      POSTGRES_MULTIPLE_DATABASES: service1,service2,service3
    volumes:
      - postgres_data:/var/lib/postgresql/data/

  service1:
    container_name: service1
    build:
      context: ./service1
      args:
        environ: local
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8001:8000"
    depends_on:
      - postgres
    environment:
      DATABASE_URL: 'postgres://postgres/service1'
      DJANGO_MANAGEPY_MIGRATE: 'on'
      DJANGO_MANAGEPY_COLLECTSTATIC: 'on'
      DJANGO_LOADDATA: 'off'
      DOMAIN: '0.0.0.0'
    volumes:
      - ./service1/app:/home/service1/app/app

  service2:
    container_name: service2
    build:
      context: ./service2
      args:
        environ: local
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8002:8000"
    depends_on:
      - postgres
      - service1
    environment:
      DATABASE_URL: 'postgres://postgres/service2'
      DJANGO_MANAGEPY_MIGRATE: 'on'
      DJANGO_MANAGEPY_COLLECTSTATIC: 'on'
      DJANGO_LOADDATA: 'on'
      DOMAIN: '0.0.0.0'
    volumes:
      - ./service2/app:/home/service2/app/app

  service3:
    container_name: service3
    build:
      context: ./service3
      args:
        environ: local
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8003:8000"
    depends_on:
      - postgres
      - service1
    environment:
      DATABASE_URL: 'postgres://postgres/service3'
      DJANGO_MANAGEPY_MIGRATE: 'on'
      DJANGO_MANAGEPY_COLLECTSTATIC: 'on'
      DJANGO_LOADDATA: 'on'
      DOMAIN: '0.0.0.0'
    volumes:
      - ./service3/app:/home/service3/app/app

volumes:
  postgres_data: 
Run Code Online (Sandbox Code Playgroud)

bra*_*ett 5

如果您不想公开 Postgres,我建议删除您的端口映射:ports: - "5432:5432"。即将主机端口 5432 映射到容器端口,这使得它可以从主机上的该端口外部使用。

  • 是的——容器将自动侦听端口 5432。您要做的是将主机端口映射到该端口的额外步骤,但如果您只想让容器连接到它,则没有必要。容器可以通过 DNS 名称“postgres:5432”引用它 (3认同)