Docker-compose v2将端口暴露给机器

时间:2016-07-29 09:30:32

标签: django docker docker-compose

我曾经使用docker-compose的v1运行一组服务,然后使用Django的dev服务器连接它们。我过去常常使用<machine_ip>:<port>连接到服务(例如数据库)(对于postgres来说,像192.168.99.100:5432这样的smt)

现在,我刚安装了docker for mac,而v1无效。我转移到版本2但是Django抱怨没有服务正在侦听端口5432。据我所知,这是network的一个问题,但我无法理解如何配置它。从理论上讲,为compose中的所有服务创建了一个默认网络,这一般情况很好但不适用于我的情况。我使用compose来启动一组服务来连接到我的本地django执行。

这是我的docker-compose文件

version: '2'
services:
  db:
    image: postgres:9.4
    volumes_from:
      - data
    ports:
      - "5432:5432"
  es:
    image: elasticsearch:2.3
    ports:
      - "9200:9200"
      - "9300:9300"
  rabbit:
    image: rabbitmq:3
    ports:
      - "5672:5672"
      - "48429:48429"
  data:
    # use this that is already downloaded
    # links just to keep the db
    image: alpine:3.3
    command: echo 'Data Container for PostgreSQL'
    volumes:
      - /var/lib/postgresql/data
networks:
  default:
    driver: bridge

和我的django conf

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': '192.168.99.100',  # 'localhost',
        'PORT': '5432'  # '6543'
    },
}

其中192.168.99.100docker-machine ip

结果是

django.db.utils.OperationalError: could not connect to server: Connection refused
    Is the server running on host "192.168.99.100" and accepting
    TCP/IP connections on port 5432?

有关如何将所有这些端口暴露给机器ip的任何帮助?

1 个答案:

答案 0 :(得分:1)

尝试使用泊坞窗内部网络功能让容器相互通信。

version: '2'
services:
  db:
    image: postgres:9.4
    volumes:
      - datavolume_postgres:/var/lib/postgresql/data
    ports:
      - "5432:5432"
  es:
    image: elasticsearch:2.3
    ports:
      - "9200:9200"
      - "9300:9300"
  rabbit:
    image: rabbitmq:3
    ports:
      - "5672:5672"
      - "48429:48429"
    depends_on:
      - "db"
# Named volume
volumes:
  datavolume_postgres: {}

#You dont need to specify the default network

并在django.conf

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',  # 'localhost',
        'PORT': '5432'  # '6543'
    },
}

我不知道es取决于什么,我希望你能得到点

仅供参考depends_on reference