第一次尝试进入码头,我撞墙了 . 我不明白docker是如何工作的以及当我的本地机器从容器“分离”的时候 . 最后,项目使用docker-compose运行,但没有使用docker运行,因为它无法连接到postgres .

当我使用这些设置运行docker-compose运行时,一切正常:

settings.py:

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

泊坞窗,compose.yml

version: '2'
services:
  db:
    image: postgres
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    ports:
      - '5432:5432'
  redis:
    image: redis
    ports:
      - '6379:6379'
  celery:
    build:
      context: .
      dockerfile: Dockerfile
    env_file: common.env
    command: celery -A saleor worker --app=saleor.celeryconf:app --loglevel=info
    volumes:
      - .:/app:Z
    links:
      - redis
    depends_on:
      - redis
  search:
    image: elasticsearch:5.4.3
    mem_limit: 512m
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - '127.0.0.1:9200:9200'
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    env_file: common.env
    depends_on:
      - db
      - redis
      - search
    ports:
      - '8000:8000'
    volumes:
      - .:/app:Z
  makemigrations:
    build: .
    command: python manage.py makemigrations --noinput
    volumes:
      - .:/app:Z
  migration:
    build: .
    command: python manage.py migrate --noinput
    volumes:
      - .:/app:Z

但是,如果我跑

  • docker build -t db_test .

  • docker run -p 4000:8000 db_test

Dockerfile:

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"]

我得到一个例外:

OperationalError at /无法将主机名“db”转换为地址:名称或服务未知

如果我将数据库设置更改为:

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

我得到的构建和运行:

无法连接到服务器:连接被拒绝服务器是否在主机“localhost”(127.0.0.1)上运行并接受端口5432上的TCP / IP连接?无法连接到服务器:无法分配请求的地址服务器是否在主机“localhost”(:: 1)上运行并接受端口5432上的TCP / IP连接?

这是我机器上的postgres端口 . 然后,如果我转动postgres和端口是免费的,没有任何变化 .

任何帮助将非常感谢!