docker-compose: запустить команду, ничего не переопределяя - PullRequest
3 голосов
/ 04 апреля 2019

У меня есть файл docker-compose, который выглядит так:

version: "3"

services:
    mongoDB:
        restart: unless-stopped
        volumes:
            - "/data/db:/data/db"
        ports:
            - "27017:27017"
            - "28017:28017"
        image: "andresvidal/rpi3-mongodb3:latest"
    mosquitto:
        restart: unless-stopped
        ports:
            - "1883:1883"
        image: "mjenz/rpi-mosquitto"
    FG:
        privileged: true
        network_mode: "host"
        depends_on:
            - "mosquitto"
            - "mongoDB"
        volumes:
            - "/home/pi:/home/pi"
            - "/boot:/boot"
        image: "arkfreestyle/fg:v1.8"
        entrypoint: /app/docker-entrypoint.sh
        restart: unless-stopped

Я использую контейнер mongoDB для raspberry pi, созданного кем-то другим (я только что вытащил его из docker-hub), проблема в том, что если по какой-либо причине происходит неправильное завершение работы, контейнер не справляется с mongod Файл .lock в каталоге / data / db.

В этом случае при попытке перезапустить все контейнеры контейнер mongodb продолжает выход с кодом состояния 100, и единственный способ исправить это - вручную удалить файл блокировки, выполнив: sudo rm / data / db / mongod. заблокировать в моем терминале. Однако я хочу автоматизировать это и запустить эту команду в моем файле docker-compose, либо перед запуском контейнера mongodb, либо, если он пытается перезапустить.

Я не хочу связываться с Dockerfile mongodb, потому что он создан кем-то другим (кстати, полезно ли вносить изменения в Dockerfiles других людей?), Поэтому я хочу использовать свой файл docker-compose. Я не могу использовать точку входа или параметры команды, потому что я не хочу переопределять какие-либо команды по умолчанию в Dockerfile, я просто хочу запустить эту дополнительную команду, не вмешиваясь ни в что другое:

sudo rm /data/db/mongod.lock

И я хочу запустить это либо до запуска контейнера mongodb (в худшем случае он просто выведет файл не найден), либо если mongodb пытается перезапустить.

Я открыт для новых идей о том, как вы рекомендуете решать эту проблему, поэтому любая помощь приветствуется!

1 Ответ

1 голос
/ 04 апреля 2019

Вы можете создать свой собственный Dockerfile, который расширяет оригинальный «andresvidal / rpi3-mongodb3: latest». Если тот использует скрипт как ENTRYPOINT, вы можете добавить свои команды в конец этого файла (например, RUN echo xxx >> /docker-entrypoint.sh).

Тогда в docker-compose вы должны использовать свои собственные изображения, основанные на том, что было разработано кем-то другим. И да, не стоит поменять Dockerfile на другие, но если вы видите проблемы или улучшения, вы должны попытаться предложить их изменения.

Мой совет - не использовать «последний» при импорте исходного файла Docker, а указывать конкретную версию. Таким образом, вы больше контролируете, как импортировать будущие изменения.

...