AdminMongo с docker-compose не работает

POW уже имеет хороший ответ, если вам нужен результат в виде новой строки. Этот ответ заключается в том, как обрабатывать его, если вы хотите обновить на месте.

Первая часть рецепта - std::remove_if, которая может эффективно удалить пунктуацию, упаковывая все знаки без пунктуации по мере их появления .

std::remove_if (text.begin (), text.end (), ispunct)

К сожалению, std::remove_if не сжимает строку до нового размера. Это невозможно, потому что у него нет доступа к самому контейнеру. Поэтому в результате после упакованного результата есть символы нежелательной почты.

Чтобы обработать это, std::remove_if возвращает итератор, который указывает часть строки, которая по-прежнему необходима. Это можно использовать со строками erase методом, приводящим к следующей идиоме ...

text.erase (std::remove_if (text.begin (), text.end (), ispunct), text.end ());

Я называю это идиомой, потому что это обычная техника, которая работает во многих ситуациях. Другие типы, кроме string, предоставляют подходящие методы erase и std::remove (и, возможно, некоторые другие функции библиотеки алгоритмов, которые я забыл на данный момент) используют этот подход для закрытия пробелов для элементов, которые они удаляют, изменение размера для вызывающего абонента.

2
задан Crayzzit 22 February 2019 в 10:25
поделиться

2 ответа

Я нашел здесь 2 проблемы:

1-й: Недостаточно разоблачить порт. expose это просто документация, вам нужно publish (привязать) порт к хосту, чтобы он был доступен. Вот как это делается:

ports:
  - 1234:1234

2-й: необходимо настроить adminmongo для прослушивания 0.0.0.0, потому что по умолчанию он начинает прослушивать 127.0.0.1, и это делает его доступно только внутри самого контейнера. На странице документации , которую вы включили в свой вопрос, в разделе Конфигурация говорится, что это можно сделать, передав переменную окружения:

Все выше параметры могут использоваться в среде, что делает его очень удобным при использовании adminMongo в качестве док-контейнера! просто запустите docker run -e HOST=yourchoice -e PORT=1234 ...

Поскольку вы используете docker-compose, это делается следующим образом:

environment:
  - HOST=0.0.0.0

Рабочий пример: [1116 ]

version: '3'
services:
  mongo:
    image: mongo
    volumes:
      - ~/data:/data/db
    restart: always
    expose:
      - 6016
  adminmongo:
    image: mrvautin/adminmongo
    ports:
      - 1234:1234
    environment:
      - HOST=0.0.0.0
0
ответ дан tgogos 22 February 2019 в 10:25
поделиться

Вы должны открыть свой сервис для внешнего мира следующим образом:

version: '3'
services:
  mongo:
    image: mongo
    volumes:
      - ~/data:/data/db
    restart: always
  adminmongo:
    image: mrvautin/adminmongo
    ports:
      - 1234:1234

Теперь вы можете получить доступ к своему adminmongo по http: // localhost: 1234 .

И вам не нужно использовать ссылки здесь. Так как compose создает сеть и объединяет все сервисы в файлах compose. Вы можете получить доступ к другим контейнерам с их сервисными именами.

0
ответ дан Thilak 22 February 2019 в 10:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: