docker: получить внешний IP контейнера - PullRequest
0 голосов
/ 01 июля 2019

Удаленный запуск нескольких док-контейнеров, включая базу данных postgres.

$docker-compose ps
        Name                      Command                  State                                Ports
-------------------------------------------------------------------------------------------------------------------------------
fiware-cygnus          /cygnus-entrypoint.sh            Up (healthy)   0.0.0.0:5050->5050/tcp, 0.0.0.0:5080->5080/tcp
fiware-elasticsearch   /docker-entrypoint.sh elas ...   Up             9200/tcp, 9300/tcp
fiware-grafana         /run.sh                          Up             0.0.0.0:53153->3000/tcp
fiware-iotagent        pm2-runtime bin/lwm2mAgent ...   Up (healthy)   0.0.0.0:4041->4041/tcp, 5684/tcp, 0.0.0.0:5684->5684/udp
fiware-memcached       docker-entrypoint.sh memca ...   Up             11211/tcp
fiware-mongo           docker-entrypoint.sh --bin ...   Up             0.0.0.0:27017->27017/tcp
fiware-nginx           nginx -g daemon off;             Up             0.0.0.0:53152->53152/tcp, 80/tcp
fiware-orion           /usr/bin/contextBroker -fg ...   Up (healthy)   0.0.0.0:1026->1026/tcp
fiware-postgres        docker-entrypoint.sh postgres    Up             0.0.0.0:5432->5432/tcp
fiware-wirecloud       /docker-entrypoint.sh            Up (healthy)   8000/tcp

Я хочу получить внешний IP-адрес контейнера fiware-postgres, чтобы я мог подключаться через pgAdmin вместо управления db через postgres клиент.Похоже, что IP-адрес fiware-postgres доступен только для внутреннего использования.

$docker inspect fiware-postgres | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.19.0.3",

Ошибка pgAdmin:

Unable to connect to server:

could not connect to server: Operation timed out
Is the server running on host "172.19.0.3" and accepting
TCP/IP connections on port 5432?

Есть ли способ получить его внешний IP или, по крайней мере, какой-нибудь способподключение через pgAdmin (не забывайте, что Docker-контейнер запускается на удаленном компьютере, доступ к которому осуществляется через ssh).

EDIT

Удаленный хост доступен через ssh root@193.136.x.x:2222, поэтому postgres port 5432 не может быть достигнуто.

Настройки pgAdmin (вкладка «Подключение»):

Host: 193.136.xx.xx
Port: 5432
Maintenance database: postgres
Username: postgres
Password: password

Ошибка pgAdmin:

Unable to connect to server:

could not connect to server: Operation timed out
Is the server running on host "193.136.x.x" and accepting
TCP/IP connections on port 5432?

postgres определение сервиса (в docker-compose):

postgres:
    restart: always
    image: postgres:10
    hostname: postgres
    container_name: fiware-postgres
    expose:
      - "5432"
    ports:
      - "5432:5432"
    networks:
      - default
    environment:
      - "POSTGRES_PASSWORD=password"
      - "POSTGRES_USER=postgres"
      - "POSTGRES_DB=postgres"
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    build:
      context: .
      shm_size: '2gb'

Ответы [ 2 ]

3 голосов
/ 01 июля 2019

Предполагая, что вы выставили порты вашего контейнера на базовый хост , тогда приложение доступно через IP-адрес базового хоста.

IP-адрес 172.19.0.3это IP-адрес, который существует в сети Docker на хосте: он недоступен извне.Если ваш удаленный хост имеет IP 1.2.3.4 и порт вашего приложения открыт, например, в вашем файле compose у вас есть что-то вроде:

ports:
  - "5432:5432"

Тогда ваше приложение должно быть доступно через 1.2.3.4:5432.

РЕДАКТИРОВАТЬ:

Если вы подключаетесь с локального компьютера к удаленному серверу с помощью pgAdmin, тогда не должно быть необходимости в ssh: вы должны обнаружить, что служба все еще доступна на 1.2.3.4:5432.Однако, если у вас есть какая-то форма брандмауэра (например, вы подключаетесь к серверу AWS), тогда доступ к 5432 на удаленном хосте вполне может быть заблокирован.В этом случае рассмотрите возможность использования перенаправление портов для маршрутизации соединений на локальном сервере с удаленным сервером через соединение ssh.

ssh -L 5432:193.136.x.x:5432 193.136.x.x:2222

Теперь подключитесь с помощью pgAdmin к localhost:5432 или 127.0.0.1:5432.

0 голосов
/ 02 июля 2019

Вот решение, которое работает для меня:

ssh -p 2222 root@193.136.xx.xx -L 5432:localhost:5432

postgres сервер наконец доступен через pgAdmin

...