Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/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
Postgresql Docker Compose和Postgres:名称未解析_Postgresql_Docker_Docker Compose - Fatal编程技术网

Postgresql Docker Compose和Postgres:名称未解析

Postgresql Docker Compose和Postgres:名称未解析,postgresql,docker,docker-compose,Postgresql,Docker,Docker Compose,在Docker中,我正在尝试配置Postgres,将其安装到另一个容器中并运行,然后将其链接到我的用户服务,设置为以下结构: docker-compose-dev.yml services/ users/ manage.py Dockerfile-dev entrypoint.sh project/ __init__.py

在Docker中,我正在尝试配置Postgres,将其安装到另一个容器中并运行,然后将其链接到我的
用户
服务,设置为以下结构:

docker-compose-dev.yml
services/
        users/
             manage.py
             Dockerfile-dev
             entrypoint.sh
             project/
                    __init__.py
                    config.py
                    db/
                      create.sql
                      Dockerfile
docker-compose-dev.yml

version: '3.7'

services:

  users:
    build:
      context: ./services/users
      dockerfile: Dockerfile-dev
    volumes:
      - './services/users:/usr/src/app'
    ports:
      - 5001:5000
    environment:
      - FLASK_APP=project/__init__.py
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@users-db:5432/users_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@users-db:5432/users_test  
    depends_on:  
      - users-db

  users-db:  
    build:
      context: ./services/users/project/db
      dockerfile: Dockerfile
    ports:
      - 5435:5432
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
CREATE DATABASE users_prod;
CREATE DATABASE users_dev;
CREATE DATABASE users_test;
Dockerfile dev

# base image
FROM python:3.7.2-alpine

# install dependencies
RUN apk update && \
    apk add --virtual build-deps gcc python-dev musl-dev && \
    apk add postgresql-dev && \
    apk add netcat-openbsd

# set working directory
WORKDIR /usr/src/app

# add and install requirements
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

# add entrypoint.sh
COPY ./entrypoint.sh /usr/src/app/entrypoint.sh
RUN chmod +x /usr/src/app/entrypoint.sh

# add app
COPY . /usr/src/app

# run server
CMD ["/usr/src/app/entrypoint.sh"]
在这里,我试图通过向容器中的
“docker entrypoint initdb.d”
目录添加一个SQL文件来扩展官方Postgres映像

Dockerfile

# base image
FROM postgres:11.1-alpine

# run create.sql on init
ADD create.sql /docker-entrypoint-initdb.d
create.sql

version: '3.7'

services:

  users:
    build:
      context: ./services/users
      dockerfile: Dockerfile-dev
    volumes:
      - './services/users:/usr/src/app'
    ports:
      - 5001:5000
    environment:
      - FLASK_APP=project/__init__.py
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@users-db:5432/users_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@users-db:5432/users_test  
    depends_on:  
      - users-db

  users-db:  
    build:
      context: ./services/users/project/db
      dockerfile: Dockerfile
    ports:
      - 5435:5432
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
CREATE DATABASE users_prod;
CREATE DATABASE users_dev;
CREATE DATABASE users_test;
由于“users”服务不仅依赖于容器的启动和运行,而且还依赖于实际的Postgres实例的启动和正常运行,因此我在“users”中添加了一个
entrypoint.sh
文件:

entrypoint.sh

#!/bin/sh

echo "Waiting for postgres..."

while ! nc -z users-db 5432; do
  sleep 0.1
done

echo "PostgreSQL started"

python manage.py run -h 0.0.0.0
管理.py

from flask.cli import FlaskGroup
from project import app, db

cli = FlaskGroup(app)
@cli.command('recreate_db')
def recreate_db():
    db.drop_all()
    db.create_all()
    db.session.commit()
if __name__ == '__main__':
    cli()
import os  

class BaseConfig:
    """Base configuration"""
    TESTING = False
    SQLALCHEMY_TRACK_MODIFICATIONS = False  

class DevelopmentConfig(BaseConfig):
    """Development configuration"""
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') 

class TestingConfig(BaseConfig):
    """Testing configuration"""
    TESTING = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_TEST_URL')  

class ProductionConfig(BaseConfig):
    """Production configuration"""
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')  
config.py

from flask.cli import FlaskGroup
from project import app, db

cli = FlaskGroup(app)
@cli.command('recreate_db')
def recreate_db():
    db.drop_all()
    db.create_all()
    db.session.commit()
if __name__ == '__main__':
    cli()
import os  

class BaseConfig:
    """Base configuration"""
    TESTING = False
    SQLALCHEMY_TRACK_MODIFICATIONS = False  

class DevelopmentConfig(BaseConfig):
    """Development configuration"""
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') 

class TestingConfig(BaseConfig):
    """Testing configuration"""
    TESTING = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_TEST_URL')  

class ProductionConfig(BaseConfig):
    """Production configuration"""
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')  
我使用以下工具运行并成功构建它:

docker-compose -f docker-compose-dev.yml up -d --build
但我有一些网络问题。如果我跑步:

docker-compose -f docker-compose-dev.yml logs
我得到:

Attaching to dev2_users_1
users_1  | Waiting for postgres...
users_1  | nc: getaddrinfo: Name does not resolve
users_1  | nc: getaddrinfo: Name does not resolve
users_1  | nc: getaddrinfo: Name does not resolve
users_1  | nc: getaddrinfo: Name does not resolve
users_1  | nc: getaddrinfo: Name does not resolve
(...)

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
6ca5718c9867        dev2_users          "/usr/src/app/entryp…"   2 minutes ago       Up 2 minutes        0.0.0.0:5001->5000/tcp   dev2_users_1

上面的代码中缺少了什么?

您需要在
Dockerfile dev
中安装
绑定工具
,因为
名称无法解决问题:

apk add bind-tools 
测试:


PostgreSQL的启动通常相当健谈;在日志输出中,您是否确实看到了
users-db_1
中的任何内容?不,我什么也看不到…我认为问题在于
users-db_1
启动失败,请执行
docker-compose-f docker-compose-dev.yml up
而不执行
-d
并查找
users-db_1
中的日志。尝试过了。由于
而在
entrypoint.sh
中,我得到了一个无限循环。没有用户的迹象-db-1。还有其他日志命令吗?