无法使用docker build连接到postgres数据库

时间:2018-01-17 14:26:24

标签: postgresql docker dockerfile

我正在尝试构建映像并将其部署到VPS。

我正在使用

成功运行该应用
struct SomeData { int n; } s1{2}, s2{4};
std::vector<SomeData*> data{&s1, &s2};

for (auto& item : Adaptor{data}) {
    std::cout << item.n << "\n";
}

然后我用

构建它
docker-compose up

当我尝试在本地或VPS槽底坞云上进行测试时:

docker build -t mystore .

容器工作正常,但是当我点击http://0.0.0.0:4000/

我得到了:

/的OperationalError 无法翻译主机名&#34; db&#34;解决:名称或服务未知

我已将postgresql.conf listen_addresses更改为&#34; *&#34;,没有任何更改。 posgresql日志为空。我正在运行MacOS。

这是我的DATABASE配置:

docker run -p 4000:8000 mystore 

这是Dockerfile

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': 'db',
        'PORT': '5432',
    }
}

这是docker-compose.yml文件:

FROM python:3.5
ENV PYTHONUNBUFFERED 1

RUN \
  apt-get -y update && \
  apt-get install -y gettext && \
  apt-get clean

ADD requirements.txt /app/
RUN pip install -r /app/requirements.txt

ADD . /app
WORKDIR /app

EXPOSE 8000
ENV PORT 8000

CMD ["uwsgi", "/app/saleor/wsgi/uwsgi.ini"]

3 个答案:

答案 0 :(得分:1)

您忘记将links添加到web图片

web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    env_file: common.env
    depends_on:
      - db
      - redis
      - search
    links: # <- here
      - db
      - redis
      - search
    ports:
      - '8000:8000'
    volumes:
      - .:/app:Z

答案 1 :(得分:1)

检查可用的网络。默认情况下有3个:

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
db07e84f27a1        bridge              bridge              local
6a1bf8c2d8e2        host                host                local
d8c3c61003f1        none                null                local

我的docker compose的简化设置。只有postgres:

version: '2'
services:
  postgres:
    image: postgres
    name: postgres
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    ports:
      - '5432:5432'
    networks:
      random:

  networks:
    random:

我给postgres容器命名postgres并调用了postgres服务,我创建了一个名为&#39; random&#39; (最后的命令),我已经将服务postgres随机添加到网络中。如果您没有指定网络,您将看到docker-compose创建了一个自我命名的网络。 启动docker-compose后,您将拥有4个网络。一个新的桥网称为随机。

通过检查例如postgres容器,检查您的docker组成环境的网络是: 我是在网络中创建的,random&#39;:

$ docker inspect postgres

它在网络中random&#39;。

 "Networks": {
                "random": {..

现在在同一个网络中启动您的mystore容器:

$ docker run -p 4000:8000 --network=random mystore 

您可以使用docker inspect再次查看。确保您可以在mystore容器中exec并尝试ping postgres。它们部署在同一网络中,因此这应该是可能的,并且您的容器应该能够将名称postgres转换为地址。

答案 2 :(得分:0)

你的docker-compose.yml中的

,添加一个网络,然后像这样添加你的容器:

每个容器定义添加:

networks:
    - mynetwork

然后,在文件末尾添加:

networks:
    mynetwork: