opt*_*iks 11 python django postgresql docker
我有两个Docker容器.第一个是Postgresql容器,我使用以下命令运行.
sudo docker run -v /home/mpmsp/project/ezdict/postgresql/data:/var/lib/postgresql/data -p 127.0.0.1:5432:5432 -name my-postgres -d postgres
Run Code Online (Sandbox Code Playgroud)
它基于官方图像,它工作正常,我可以从主机连接到Postgresql.
第二个容器是我的Django应用程序的容器.使用以下Dockerfile构建映像(基于此映像):
FROM python:3-onbuild
EXPOSE 8000 5432
CMD ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令运行此容器
sudo docker run --link my-postgres:my-postgres -v /home/mpmsp/project/ezdict/ezbkend:/usr/src/app -name my-app -i -t my-app
Run Code Online (Sandbox Code Playgroud)
docker ps输出显示容器已链接
NAMES
my-app/my-postgres, my-postgres
Run Code Online (Sandbox Code Playgroud)
但是,当我转到localhost:8000时,我看到Django的错误页面,输出如下
OperationalError at /api-auth/login/
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?
Request Method: GET
Request URL: http://127.0.0.1:8000/api-auth/login/
Django Version: 1.6.4
Exception Type: OperationalError
Exception Value:
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?
Exception Location: /usr/local/lib/python3.4/site-packages/psycopg2/__init__.py in connect, line 164
Python Executable: /usr/local/bin/python
Python Version: 3.4.1
Python Path:
['/usr/src/app',
'/usr/local/lib/python34.zip',
'/usr/local/lib/python3.4',
'/usr/local/lib/python3.4/plat-linux',
'/usr/local/lib/python3.4/lib-dynload',
'/root/.local/lib/python3.4/site-packages',
'/usr/local/lib/python3.4/site-packages']
Server time: ???, 10 ??? 2014 12:07:07 +0400
Run Code Online (Sandbox Code Playgroud)
应用程序的settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'postgres',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
Run Code Online (Sandbox Code Playgroud)
如何进行链接工作?提前致谢
Tho*_*eil 14
Django映像的Dockerfile不应该公开端口,5432因为在该映像创建的任何容器中都不会运行Postgresql服务器:
FROM python:3-onbuild
EXPOSE 8000
CMD ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)
然后在运行连接它的Django容器时
--link my-postgres:my-postgres
您的数据库设置不正确.
在Django容器中:127.0.0.1指的是没有运行任何侦听端口5432的服务的Django容器.
所以你的settings.py文件应该是:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'postgres',
'PASSWORD': '',
'HOST': 'my-postgres',
'PORT': '5432',
}
}
Run Code Online (Sandbox Code Playgroud)
在运行Django容器时:
sudo docker run --link my-postgres:db -v /home/mpmsp/project/ezdict/ezbkend:/usr/src/app -name my-app -i -t my-app
那么你的settings.py文件必须是:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'postgres',
'PASSWORD': '',
'HOST': 'db',
'PORT': '5432',
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8515 次 |
| 最近记录: |