Tôi có hai vùng chứa Docker. Cái đầu tiên là container Postgresql, mà tôi chạy bằng lệnh sau đây.Liên kết Django và Postgresql với Docker
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
Nó dựa trên official image và hoạt động hoàn hảo, tôi có thể kết nối với Postgresql từ máy chủ.
Vùng chứa thứ hai là vùng chứa với ứng dụng Django của tôi. Những hình ảnh được xây dựng bằng cách sử dụng Dockerfile sau (dựa trên this image):
FROM python:3-onbuild
EXPOSE 8000 5432
CMD ["/bin/bash"]
Và tôi chạy chứa này với lệnh sau đây
sudo docker run --link my-postgres:my-postgres -v /home/mpmsp/project/ezdict/ezbkend:/usr/src/app -name my-app -i -t my-app
Docker ps đầu ra cho thấy rằng container được liên kết
NAMES
my-app/my-postgres, my-postgres
Tuy nhiên, khi tôi đi đến localhost: 8000, tôi thấy một trang lỗi từ Django, với đầu ra sau
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
settings.py của ứng dụng
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'postgres',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
Làm thế nào để làm cho liên kết làm việc? Cảm ơn trước
Đồng bộ hóa/di chuyển db là gì? Tôi nhận ra rằng tôi không thể liên kết container postgres trên xây dựng nhưng tôi cần phải làm syncdb và di chuyển bằng cách nào đó trước khi chạy máy chủ django. – syabro
vì vậy đối số thứ hai (sau dấu hai chấm) trong '--link my-postgres: [2nd arg]' trở thành giá trị cho khóa 'HOST' trong các thiết lập' mặc định 'liên quan đến' DATABASES' của django? – pkaramol
có, cú pháp là '--link :' –
Thomasleveil