Как открыть удаленную оболочку для контейнера node.js под docker-compose (Alpine linux) - PullRequest
0 голосов
/ 08 июля 2019

У меня есть файл конфигурации docker-compose.yml с несколькими контейнерами, и один из контейнеров является экземпляром docker node.js.

По какой-то причине экземпляр docker возвращает ошибку во время запуска.В результате невозможно подключиться к контейнеру node.js и исследовать проблему.

Какой самый простой способ подключиться к сломанному node.js в Alpine linux?

Ответы [ 3 ]

1 голос
/ 08 июля 2019

Обычно по моему docker-compose.yml

Я просто заменяю команду или точка входа на:

command: watch ps

Это немного хакерски, но это держит контейнер вверх.

В качестве альтернативы, после создания образа вы можете запустить его с помощью Docker. Но тогда вам нужно сделать то, что вы сделали в файле docker-compose.yml в вашей команде, например, смонтировать тома и открыть порты вручную.

1 голос
/ 08 июля 2019

ДЛЯ DOCKER-COMPOSE

В случае, если вы используете docker-compose, самый простой способ - добавить следующую строку command в ваш файл docker-compose.yml.

services:
  api:
    build: api/.
    command: ["/bin/sh", "-c", "while sleep 3600; do :; done"]
    depends_on:
      - db
      - redis
    ...      

также необходимо комментировать построчно снизу вверх внутри Dockerfile для node.js, пока контейнер не сможет запуститься.

После запуска контейнера node.js вы можете легко подключиться к вашему контейнеру через

docker exec -it [container] sh

ДЛЯ ДОКЕРА

Вы можете просто добавить в конце Dockerfile следующую строку

CMD echo "^D for exit" && wc -

и комментируйте построчно (снизу вверх) над этой строкой, пока контейнер не сможет запуститься.

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

Вы можете docker-compose run альтернативную команду.Это не требует никаких изменений в вашем Dockerfile или docker-compose.yml.Например,

docker-compose run --rm web /bin/sh

Это создает новый контейнер, настроенный идентично тому, что запрашивается в docker-compose.yml (с переменными среды и подключенными томами), за исключением того, что ports: по умолчанию не публикуется.,Он по существу идентичен docker run с теми же параметрами, за исключением того, что по умолчанию -i -t включен.

Если ваш Dockerfile использует ENTRYPOINT вместо CMD для объявления команды основного контейнера, вам нужнота же опция --entrypoint.Например, чтобы получить список файлов в рабочем каталоге изображения по умолчанию, вы можете

docker-compose run --rm --entrypoint /bin/ls web -l

(Если ваш ENTRYPOINT является сценарием-оберткой, который в конечном итоге exec "$@" вам не нужен.)

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