Получение `docker-compose run`, чтобы ничего не делать - PullRequest
4 голосов
/ 06 октября 2019

Я делаю скрипт devops, который запускает

docker-compose run --no-deps my_service

По единственной причине выполнения диагностических операций в контейнере без выполнения фактической команды контейнера. (Поскольку это может быть ресурсоемким или может вообще не сработать.)

Я подумал, что переопределю точку входа с неким режимом, который работает вечно.

runs foreverчасть важна, потому что если я просто использую echo или cat или что-то еще, процесс немедленно завершится, и я не смогу использовать docker exec в своем контейнере.

Я пытался

--entrypoint "tail -f /dev/null"

Но не повезло. Кажется, что --entrypoint не позволяет вводить аргументы для вашей команды.

Вы знаете, возможно ли это или нет?

Еще один забавный хак, который я пробовал, сработал --entrypoint yes, который сделал точку входа Linux yes утилита, которая просто выводит y в бесконечном цикле.
Это работало нормально в течение 2 часов, пока у меня не закончилось место на жестком диске и мне не пришлось все удалять.

Если у вас есть идея для обычной команды Linux, такой как yes, которая просто ждет вечно и не печатает бесконечное количество текста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Я использую стандартную уловку для среды разработки

version: '2.4'
services:
  app:
    build: .
    ports:
      - 4000:4000
    command: tail -f /dev/null
    volumes:
      - ./:/srv/app:cached

Основная часть здесь command: tail -f /dev/null.

Тогда вы просто docker-compose up и на втором терминале входите в него с помощью docker-compose exec app sh (или bash вместо sh).

Если вы хотите просто запустить контейнер, просто запустите команду с sh / bash.

Вы можете запуститьтакже как docker run --entrypoint tail -it elixir:alpine, если вам нужно переопределить точку входа и просто "повесить" ее.

0 голосов
/ 06 октября 2019

А как насчет watch? Это работает:

# Dockerfile
FROM busybox

ENTRYPOINT ["echo","hello"]
# docker-compose.yml
version: '3'
services:
  test:
    build:
      context: .

Тогда:

$ docker-compose run --entrypoint="watch -n2 ls" test

[РЕДАКТИРОВАТЬ]: Вы можете даже установить -n на 100000, если вы не хотите, чтобы ваш контейнер делал много... Кстати, я пробовал с tail -f /dev/null и, похоже, работает, какая версия docker-compose и docker?

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