3

我在 VM 实例中有一个 cookiecutter django 项目,一个最小的。让我们调用VM_D。这是我正在尝试运行的 production.yml:

version: '2'

volumes:
  caddy: {}

services:
  django: &django
    build:
      context: .
      dockerfile: ./compose/production/django/Dockerfile
    depends_on:
      - redis
    env_file: .env
    command: /gunicorn.sh

  caddy:
    build:
      context: .
      dockerfile: ./compose/production/caddy/Dockerfile
    depends_on:
      - django
    volumes:
      - caddy:/root/.caddy
    env_file: .env
    ports:
      - "0.0.0.0:80:80"
      - "0.0.0.0:443:443"

  redis:
    image: redis:3.0

  celeryworker:
    <<: *django
    depends_on:
     - redis
    command: /start-celeryworker.sh

  celerybeat:
    <<: *django
    depends_on:
      - redis
    command: /start-celerybeat.sh

此外,我还有另一个运行 postgres 的 VM 实例,但不在 docker 内。我们称之为VM_P。

这两个 VM 相互连接(我可以相互 ping 它们,甚至可以从 VM_D 远程使用 psql),而 postgres 不能访问 Internet(出于安全原因)。所以基本上,VM_D 有两张卡(en0 用于外部访问互联网,en1 用于连接 VM_P),而 VM_P 只有一张卡(用于连接 VM_D)。

我希望能够从 django 容器访问 VM_P。我知道我必须将默认的“网桥”连接到 en1 卡,但如果不更改与 en0 的连接,我还无法做到这一点。

尝试

  • 我试图在production.yml中将“桥”和“主机”网络分配给django,而将“桥”分配给其他网络,但它没有说只允许一个“主机”网络。
  • 我试图将“主机”分配给 django 容器,连接到 VM_P 但其他容器不再连接到 django。
  • 我检查了 Pipework 解决方案,但建议在使用之前检查“本机”方式。

感谢您的帮助!

4

0 回答 0