Я знаю разницу между 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?
Ваш скрипт ничего не делает с любыми параметрами, которые он может получить. Вам нужно добавить параметры в команду ansible-playbook
в скрипте, вот так
#!/usr/bin/env sh
set -e
cp -pr /ssh /root/.ssh
chown -R root:root /root/.ssh/config
ansible-playbook $@