Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker映像未运行,数据库错误:django.db.utils.OperationalError无法将主机名“postgres”转换为地址:名称或服务未知_Django_Postgresql_Docker_Dockerfile_Digital Ocean - Fatal编程技术网

Docker映像未运行,数据库错误:django.db.utils.OperationalError无法将主机名“postgres”转换为地址:名称或服务未知

Docker映像未运行,数据库错误:django.db.utils.OperationalError无法将主机名“postgres”转换为地址:名称或服务未知,django,postgresql,docker,dockerfile,digital-ocean,Django,Postgresql,Docker,Dockerfile,Digital Ocean,因此,我已经设法使用Docker compose build在本地构建我的Docker映像,并将该映像推送到我的Docker Hub存储库 现在我想让它在DigitalOcean上运行,这样我就可以主持它了。我已提取了正确版本的图像,并尝试使用以下命令运行它: root@my-droplet:~docker run-rm-it-p8000:8000/tcp mycommand/myapp:1.1是的,1.1 然而,我很快就遇到了以下两个错误: 这可能是因为我使用docker compose,ym

因此,我已经设法使用Docker compose build在本地构建我的Docker映像,并将该映像推送到我的Docker Hub存储库

现在我想让它在DigitalOcean上运行,这样我就可以主持它了。我已提取了正确版本的图像,并尝试使用以下命令运行它:

root@my-droplet:~docker run-rm-it-p8000:8000/tcp mycommand/myapp:1.1是的,1.1

然而,我很快就遇到了以下两个错误:

这可能是因为我使用docker compose,yml将我的应用程序分为两个服务,并且在我发布应用程序后只推送了应用程序的图像。这是我的docker-compose.yml文件:

这是我的docker-compose.yml文件:

版本:“3” 服务: db: 图片:博士后 环境: -POSTGRES_DB=POSTGRES -POSTGRES_USER=adminname -POSTGRES_PASSWORD=adminpassword -CLOUDINARY\u URL=cloudinarykey 应用程序: 生成:。 端口: - 8000:8000 取决于: -分贝 这是我的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
下面是my settings.py文件的一个片段:

如何解决此问题?我环顾四周,但看不出我做错了什么

根据我在网上看到的情况,我在我的项目中添加了以下内容,但它也不起作用:

这是我的base.py新文件:

导入psycopg2 conn=psycopg2.connectdbname='postgres'user='admin'host='db'password='[密码]' 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
但由于以下错误,生成失败:

我不确定下一步该做什么,但我觉得我犯了一个简单的错误。为什么现在连接被拒绝

我正在尝试使用以下命令运行它:root@my-液滴:~

docker run-rm-it-p 8000:8000/tcp mycommand/myapp:1.1是,1.1

Docker compose允许创建多个容器的组合。 使用docker run运行django容器违背了它的目的

您想要的是运行:

docker-compose build

docker-compose up
或在单个命令中:

docker-compose up --build                    
为什么现在连接被拒绝

也许是因为这不是在适当的时候做的

我不是Django专家,但您的第二次尝试看起来不错,而Django服务在我假设的撰写声明键入错误中遗漏了Dockerfile属性

第一次尝试时,会出现以下错误:

django.db.utils.OperationalError: could not translate host name "postgres" to address: Name or service not known ```
 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?
这意味着django使用postgres作为数据库的主机。 但是根据您的compose,可以使用名为db的主机访问数据库。这些不匹配

关于定义数据库属性的第二次尝试,它看起来不错,而且还与以下内容匹配:

在本节中,您将为Django设置数据库连接

在项目目录中,编辑composeexample/settings.py文件

替换数据库=。。。以下是:

设置.py 第二次尝试时,请注意以下错误:

django.db.utils.OperationalError: could not translate host name "postgres" to address: Name or service not known ```
 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?
这可能意味着当Django尝试初始化与的连接时,Postgres DB侦听器尚未准备就绪

compose:的属性依赖于:定义容器启动的顺序,但不等待容器后面的应用程序准备就绪

这里有两种解决这种情况的方法:

在启动django服务之前,请添加几秒钟的睡眠时间 或者将django compose配置设置为在失败时重新启动。 对于第一种方法,请使用CMD配置django服务,例如not Tryed:

   app:
     build: .
     ports:
       - "8000:8000"
     depends_on:
       - db
     command: /bin/bash -c "sleep 30; python3 manage.py collectstatic && python3 manage.py makemigrations && python3 manage.py migrate && gunicorn mellon.wsgi --bind 0.0.0.0:8000 "
对于第二种方法,请尝试以下方法:

  app:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
    restart: on-failure
我正在尝试使用以下命令运行它:root@my-液滴:~

docker run-rm-it-p 8000:8000/tcp mycommand/myapp:1.1是,1.1

Docker compose允许创建多个容器的组合。 使用docker run运行django容器违背了它的目的

您想要的是运行:

docker-compose build

docker-compose up
或在单个命令中:

docker-compose up --build                    
为什么现在连接被拒绝

也许是因为这不是在适当的时候做的

我不是Django专家,但您的第二次尝试看起来不错,而Django服务在我假设的撰写声明键入错误中遗漏了Dockerfile属性

第一次尝试时,会出现以下错误:

django.db.utils.OperationalError: could not translate host name "postgres" to address: Name or service not known ```
 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?
这意味着django使用postgres作为数据库的主机。 但是根据您的compose,可以使用名为db的主机访问数据库。这些不匹配

关于定义数据库属性的第二次尝试,它看起来不错,而且还与以下内容匹配:

在本节中,您将为Django设置数据库连接

在项目目录中,编辑composeexample/settings.py文件

替换数据库=。。。以下是:

设置.py 第二次尝试时,请注意以下错误:

django.db.utils.OperationalError: could not translate host name "postgres" to address: Name or service not known ```
 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?
这可能意味着当Django尝试初始化与的连接时,Postgres DB侦听器尚未准备就绪

compose:的属性取决于:定义容器启动的顺序,但不等待应用程序启动 准备好容器后面的离子

这里有两种解决这种情况的方法:

在启动django服务之前,请添加几秒钟的睡眠时间 或者将django compose配置设置为在失败时重新启动。 对于第一种方法,请使用CMD配置django服务,例如not Tryed:

   app:
     build: .
     ports:
       - "8000:8000"
     depends_on:
       - db
     command: /bin/bash -c "sleep 30; python3 manage.py collectstatic && python3 manage.py makemigrations && python3 manage.py migrate && gunicorn mellon.wsgi --bind 0.0.0.0:8000 "
对于第二种方法,请尝试以下方法:

  app:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
    restart: on-failure
启动docker-compose.yml文件时,compose将自动为您创建docker网络并将容器附加到其中。缺少任何特定的网络:文件中的声明,Compose将命名为网络默认值,然后Compose创建的大多数内容都以当前目录名作为前缀。有关此设置的详细信息,请参阅

docker run根本不查看Compose设置,因此手动使用docker run执行的任何操作都需要复制docker-Compose.yml已经或将自动生成的设置。要使docker run容器连接到Compose网络,需要执行以下操作:

docker network ls正在查找somename\u默认值 码头工人赛跑\ -rm-it-p 8000:8000/tcp\ -net somename_default\启动docker-compose.yml文件时,compose将自动为您创建docker网络并将容器附加到其中。缺少任何特定的网络:文件中的声明,Compose将命名为网络默认值,然后Compose创建的大多数内容都以当前目录名作为前缀。有关此设置的详细信息,请参阅

docker run根本不查看Compose设置,因此手动使用docker run执行的任何操作都需要复制docker-Compose.yml已经或将自动生成的设置。要使docker run容器连接到Compose网络,需要执行以下操作:

docker network ls正在查找somename\u默认值 码头工人赛跑\ -rm-it-p 8000:8000/tcp\
-net somename\u default\n我错过了运行部分。很好的解释:当我使用docker卷ls时,没有可用的卷。为什么会这样?我是说docker network ls,对不起;“我已经搞定了答案。”大卫马兹,谢谢你。有三个选项:桥接、主机和无。如何知道要选择哪一个?如果您运行了docker compose up-d,那么应该有一个名为somename\u default的目录,其中somename是当前目录的名称。用那个,我错过了跑步部分。很好的解释:当我使用docker卷ls时,没有可用的卷。为什么会这样?我是说docker network ls,对不起;“我已经搞定了答案。”大卫马兹,谢谢你。有三个选项:桥接、主机和无。如何知道要选择哪一个?如果您运行了docker compose up-d,那么应该有一个名为somename\u default的目录,其中somename是当前目录的名称。用那个。