我曾经使用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.100
是docker-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的任何帮助?
答案 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
取决于什么,我希望你能得到点