【发布时间】:2020-08-02 13:51:28
【问题描述】:
所以我设法使用docker-compose build 在本地构建了我的 Docker 映像,并将该映像推送到了我的 Docker Hub 存储库。
现在我正在尝试让它在 DigitalOcean 上运行,以便我可以托管它。我已经提取了正确版本的图像,并尝试使用以下命令运行它:
root@my-droplet:~# docker run --rm -it -p 8000:8000/tcp mycommand/myapp:1.1(是的,1.1)
但是我很快就遇到了这两个错误:
... File "/usr/local/lib/python3.8/dist-packages/django/db/backends/postgresql/base.py", line 185, in get_new_connection connection = Database.connect(**conn_params) File "/usr/local/lib/python3.8/dist-packages/psycopg2/__init__.py", line 127, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) psycopg2.OperationalError: could not translate host name "postgres" to address: Name or service not known ```
... File "/usr/local/lib/python3.8/dist-packages/django/db/backends/base/base.py", line 197, in connect self.connection = self.get_new_connection(conn_params) File "/usr/local/lib/python3.8/dist-packages/django/utils/asyncio.py", line 26, in inner return func(*args, **kwargs) File "/usr/local/lib/python3.8/dist-packages/django/db/backends/postgresql/base.py", line 185, in get_new_connection connection = Database.connect(**conn_params) File "/usr/local/lib/python3.8/dist-packages/psycopg2/__init__.py", line 127, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: could not translate host name "postgres" to address: Name or service not known ```
这可能是由于我如何将我的应用程序(使用docker-compose,yml)分成两个服务,并且自我的previous post 以来只推送应用程序的图像。这是我的docker-compose.yml 文件:
这是我的 docker-compose.yml 文件:
version: '3'
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=(adminname)
- POSTGRES_PASSWORD=(adminpassword)
- CLOUDINARY_URL=(cloudinarykey)
app:
build: .
ports:
- "8000:8000"
depends_on:
- db
这是我的 Dockerfile:
FROM (MY FRIENDS ACCOUNT)/django-npm:latest
RUN mkdir usr/src/mprova
WORKDIR /usr/src/mprova
COPY frontend ./frontend
COPY backend ./backend
WORKDIR /usr/src/mprova/frontend
RUN npm install
RUN npm run build
WORKDIR /usr/src/mprova/backend
ENV DJANGO_PRODUCTION=True
RUN pip3 install -r requirements.txt
EXPOSE 8000
CMD python3 manage.py collectstatic && \
python3 manage.py makemigrations && \
python3 manage.py migrate && \
gunicorn mellon.wsgi --bind 0.0.0.0:8000
这是我的settings.py 文件的 sn-p:
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'admin',
'PASSWORD': '[THE PASSWORD]',
'HOST': 'db',
'PORT': 5432,
}
}
...
我该如何解决这个问题?我环顾四周,但看不出我做错了什么。
根据我在网上看到的,我在我的项目中添加了以下内容,但它也不起作用:
这是我的base.py(新文件):
import psycopg2
conn = psycopg2.connect("dbname='postgres' user='admin' host='db' password='[THE PASSWORD]'")
对Dockerfile的补充:
FROM (MY FRIENDS ACCOUNT)/django-npm:latest
RUN pip3 install psycopg2-binary
COPY base.py base.py
RUN python3 base.py
...
但由于此错误,构建失败:
Traceback (most recent call last): File "base.py", line 3, in <module> conn = psycopg2.connect("dbname='postgres' user='admin' host='db' password='[THE PASSWORD]'") File "/usr/local/lib/python3.8/dist-packages/psycopg2/__init__.py", line 127, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) psycopg2.OperationalError: could not connect to server: Connection refused Is the server running on host "db" ([SOME-IP-ADDRESS]) and accepting TCP/IP connections on port 5432? ERROR: Service 'app' failed to build: The command '/bin/sh -c python3 base.py' returned a non-zero code: 1 me@My-MacBook-Pro-5 mellon %
我不确定接下来要尝试什么,但我觉得我犯了一个简单的错误。为什么此时连接被拒绝?
【问题讨论】:
标签: django postgresql docker dockerfile digital-ocean