Как указать другой порт для экземпляра Docker postgres? - PullRequest
2 голосов
/ 12 марта 2019

Я пытаюсь получить контейнер postgres, работающий на другом порту (5433 вместо 5432 по умолчанию) для нескольких сетевых потоков, таких как этот: https://github.com/docker-library/postgres/issues/196#issuecomment-310209118

(причина изменения порта заключается в том, чтонесвязанный проект, который я оставляю запущенным, уже использует порт 5432, поэтому я хотел бы иметь возможность запускать rspec одновременно для нескольких проектов.)

В моем тесте ENV у меня есть DATABASE_URL = postgresql: // postgres: @db.local: 5433 / test_agile_self

Все работало, когда я использовал порт 5432 (в DATABASE_URL и docker-compose.yml)

После изменения порта на 5433, когда я запускаю rspec, я получаю:

PG::ConnectionBad:
  could not connect to server: Connection refused
    Is the server running on host "db.local" (172.22.0.2) and accepting
    TCP/IP connections on port 5433?
# ./spec/spec_helper.rb:62:in `block (2 levels) in <top (required)>'

Контейнер действительно работает на порту 5433 и IP-адресе 172.22.0.2:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
a8f5dee227e8        postgres:10.5       "docker-entrypoint.s…"   27 minutes ago      Up 14 seconds       0.0.0.0:5433->5432/tcp   zarc_db.local_1
$ docker inspect a8f5dee227e8 | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.22.0.2",

Мой docker-compose.yml использует ports: "5433:5432" в соответствии с обсуждением, приведенным выше.

#docker-compose.yml
version: '3'
services:
  web:
    build: .
    ports:
      - "3010:3010"
    volumes:
      - .:/my_app
    links:
      - db.local
    depends_on:
      - db.local

  db.local:
    image: postgres:10.5
    ports:
      - "5433:5432"

Если я переключу 5433 обратно на 5432 в этих двух точках (ENV и docker-compose.yml), это снова будет работать.

Это включеноMac под управлением Mohave 10.14.3 и Docкер 18.09.2

Ответы [ 2 ]

3 голосов
/ 12 марта 2019

Внутри контейнера, поэтому в DATABASE_URL порт должен оставаться прежним 5432. В docker-compose вы только сопоставляете существующий порт 5432 с внешним миром как 5433, используя заданную

ports:
    - "5433:5432"
1 голос
/ 12 марта 2019

В вашем docker-compose вы можете добавить это: (длинный синтаксис)

ports:  
  - target: 80
    published: 8080
    protocol: tcp
    mode: host

Где,

  • target : порт внутри контейнера
  • опубликовано : общедоступный порт
  • протокол : протокол порта (tcp или udp)
  • mode : хост для публикации порта хоста на каждом узле или вход для порта режима роя с балансировкой нагрузки.

В качестве альтернативы однострочник: (краткий синтаксис)

ports:
  - "4040:5432" # HOST:CONTAINER

Где,

  • 4040 - порт, который должен быть выставлен на хосте
  • 5432 - порт на контейнере

ПРИМЕЧАНИЕ:

Вы можете получить ошибочные результаты при использовании порта контейнера ниже 60, поскольку YAML анализирует числа в формате xx: yy в качестве значения base-60. По этой причине мы рекомендуем всегда явно указывать сопоставления портов в виде строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...