试图在docker中运行我的django服务器,但postgres端口已被使用?当我运行“docker-compose up”时,我收到此错误:
django.db.utils.OperationalError: could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 5432?
ERROR: Service 'web' failed to build: The command '/bin/sh -c python manage.py migrate' returned a non-zero code: 1
sudo service postgresql status
收益:
9.6/main (port 5432): online
sudo lsof -nP | grep LISTEN
收益:
postgres 15817 postgres 3u IPv4 1022328 0t0 TCP 127.0.0.1:5432
我试图运行“sudo kill -9 15817”,但是docker-compose仍然收到同样的错误。
泊坞窗,compose.yml
version: '3'
services:
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
settings.朋友
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'stemletics',
'USER': 'stemleticsadmin',
'PASSWORD': 'changeme',
'HOST': '127.0.0.1', # set in docker-compose.yml
'PORT': 5432 # default postgres port
}
}
为了在Docker中使用postgres,您需要配置数据库用户,密码和db-name等信息。这是通过为容器设置环境变量来完成的。可以找到支持变量的完整列表here。
另外,您需要将qgxswpoi文件中的postgres端口5432
暴露给web
服务。
这样的事情应该有效:
泊坞窗,compose.yml
docker-compose
您还必须更改version: '3'
services:
db:
image: postgres
ports:
- "5432"
environment:
- POSTGRES_DB=stemletics
- POSTGRES_USER=stemleticsadmin
- POSTGRES_PASSWORD=changeme
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
中使用的主机名。 settings.py
为您的服务创建默认网络,并将正在运行的容器附加到此网络。在您的Web容器内,数据库将在主机名docker-compose
上提供。
settings.朋友
db
最后,如果您的python代码中没有任何类型的数据库重新连接逻辑,迁移可能仍会失败。这是因为DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'stemletics',
'USER': 'stemleticsadmin',
'PASSWORD': 'changeme',
'HOST': 'db', # set in docker-compose.yml
'PORT': 5432 # default postgres port
}
}
只等待容器启动,但postgres在容器运行后需要几秒钟才能初始化。
为了快速解决这个问题,最简单的方法是一次运行一个容器。
即:
depends_on
等待postgres初始化
$ docker-compose up -d db
希望这会让你起步并运行。