Docker: как использовать точку входа + CMD вместе

Я знаю разницу между ENTRYPOINT и CMD, но не могу решить свою проблему самостоятельно.

Это мой Dockerfile для использования ansible без установки.

FROM python:3.10.4-slim-buster
# Update and upgrade
RUN apt-get update -y && apt-get upgrade -y
# Install requirements
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends openssh-client sshpass
RUN pip install pip --upgrade
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY entrypoint.sh /entrypoint.sh
RUN chmod a+x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["--version"]

А это entrypoint.sh

#!/usr/bin/env sh
set -e

cp -pr /ssh /root/.ssh
chown -R root:root /root/.ssh/config
ansible-playbook

Итак, я ожидаю, что запуск моего Docker с

docker run \
    --rm -it \
    -v $(TOPDIR)/playbook:/playbook:ro \
    -v ~/.ssh:/ssh:ro \
    sineverba/ansible:latest

(итак, без аргументов или CMD) я получаю версию ansible в консоли. Но ничего не возвращается и не печатается.

Ни если я добавлю правильное использование, я думал, что оно перезаписывает инструкцию CMD

docker run \
    --rm -it \
    -v $(TOPDIR)/playbook:/playbook:ro \
    -v ~/.ssh:/ssh:ro \
    --name $(CONTAINER_NAME) \
    $(IMAGE_NAME):$(VERSION) \
    -i /playbook/inventory.yml /playbook/playbook.yml

Но если я удалю точку входа и перестрою с помощью

FROM python:3.10.4-slim-buster
# Update and upgrade
RUN apt-get update -y && apt-get upgrade -y
# Install requirements
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends openssh-client sshpass
RUN pip install pip --upgrade
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY entrypoint.sh /entrypoint.sh
RUN chmod a+x /entrypoint.sh
ENTRYPOINT ["ansible-playbook"]
CMD ["--version"]

Я получаю версию в консоли / могу использовать ansible (ну, нет, потому что мне нужно сменить владельца ключей SSH), но, кроме проблем с ssh, я получаю свой рабочий докер.

Итак, как мне заменить точку входа ansible-playbook на точку входа sh?

0
0
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш скрипт ничего не делает с любыми параметрами, которые он может получить. Вам нужно добавить параметры в команду ansible-playbook в скрипте, вот так

#!/usr/bin/env sh
set -e

cp -pr /ssh /root/.ssh
chown -R root:root /root/.ssh/config
ansible-playbook $@

Другие вопросы по теме