Docker выход после точки входа - PullRequest
1 голос
/ 29 февраля 2020

Я пытаюсь написать docker изображение для s3cmd. Когда я запускаю образ, созданный из Dockerfile, через docker -compose, контейнер завершает работу перед командой в docker compose run.

Dockerfile

FROM alpine:latest

COPY ./.s3cfg /s3cmd_repo/.s3cfg.example
COPY entrypoint.sh /s3cmd_repo/

RUN chmod +x /s3cmd_repo/entrypoint.sh

ENTRYPOINT ["/s3cmd_repo/entrypoint.sh"]

точка входа. sh

#!/bin/sh
echo "--- INITIALIZING SS# CONFIGURATIONS ---"
envsubst < /s3cmd_repo/.s3cfg.example > ~/.s3cfg
s3cmd ls
echo "=== END ==="

docker -compose.yml

version: '3'    
services:
  execution:
    image: s3
    command: s3cmd ls

Я также попытался использовать tail -f /etc/issue, контейнер не вышел, но не удалось выполнить команду компоновки docker.

1 Ответ

2 голосов
/ 29 февраля 2020

Когда я запускаю образ, созданный из файла Docker, через docker -compose, контейнер завершает работу перед командой в docker compose run.

Это ожидается. Эта команда в docker compose файле: s3cmd ls добавляется к точке входа вашего s3 'Dockerfile.
Так что-то вроде этого выполняется:

/s3cmd_repo/entrypoint.sh s3cmd ls

, эти два аргумента просто игнорируются во время sh выполнение скрипта.

Чтобы выполнить несколько команд для запуска контейнера, вам не нужно определять ENTRYPOINT. Вместо этого укажите команды для запуска в docker -композиционном файле:

version: '3'    
services:
  execution:
    image: s3
    command: sh -c "/s3cmd_repo/entrypoint.sh && s3cmd ls"

Обратите внимание, что sh работает в любом дистрибутиве Linux, bash - нет (например, Alpine).

...