Docker-Compose Entrypoint / Command - PullRequest
       11

Docker-Compose Entrypoint / Command

0 голосов
/ 12 января 2019

Я пытаюсь добавить пакеты (nano) в контейнер, используя мой существующий файл docker.compose.yaml. Я могу заставить его запускать скрипт после его развертывания, но по какой-то причине он продолжает зацикливать скрипт. Это предполагаемая цель? TBH Я довольно новичок во всей настройке docker-compose.yaml, так что я не знаю, должен ли я этим заниматься!

Я пытался изменить команду: для точки входа: но я получил ту же проблему.

version: '3.4'

services:
  nextcloud:
    image: nextcloud
    container_name: "nextcloud"
    restart: always
    ports:
      - 8080:80
    volumes:
      - /dconfig/nextcloud/data:/var/www/html/data
      - /dconfig/nextcloud/config:/var/www/html/config
    network_mode: "bridge"
    environment:
      - TZ=Europe/London
      - PGID=1000
      - PUID=1000
    command: /var/www/html/config/install.sh

install.sh

#!/bin/sh
apt-get update
apt-get install -y smbclient nano

1 Ответ

0 голосов
/ 12 января 2019

Контейнер Docker выполняет ровно одну команду, и когда эта команда выполняется, контейнер завершается. Если у контейнера нет точки входа, это command: из docker-compose.yml, любые аргументы после имени изображения в команде docker run или CMD из Dockerfile. Если у него есть точка входа (entrypoint:, docker run --entrypoint ..., ENTRYPOINT), это точка входа, которая получает команду в качестве аргументов.

Вкратце: если вы передадите точку входа или команду в docker-compose.yml, она будет запускаться вместо сервера, на котором обычно будет работать контейнер. Нет простого способа Docker запустить «ловушку» до или после основного процесса.

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

FROM nextcloud
RUN apt-get update \
 && apt-get install smbclient

В docker-compose.yml измените строку image: на

services:
 nextcloud:
   build: .  # instead of image:

(Что касается стиля, я бы не стал явно задавать container_name: или network_mode:, здесь по умолчанию настроены параметры Docker Compose. Я также не стал бы устанавливать nano или любой другой текстовый редактор в контейнере, поскольку любые изменения, которые вы делаете локально, будут потеряны, как только вы перезапустите контейнер. Хотя вы все еще отлаживаете изображение, я бы также не стал использовать спецификацию restart: always, хотя это разумно, если вы более уверены, что все работает. )

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