Нет конкретного требования, что вы должны делать все внутри вашего Dockerfile. Особенно то, что требует удаленного доступа по ssh, лучше делать вне Docker: учтите, что любой, кто получит ваше изображение позже, может docker cp
получить из него действительный ключ ssh и потенциально получить доступ к вашим внутренним системам.
По причинам, связанным с кэшированием в Docker, также не рекомендуется git clone
или иным образом пытаться удаленно извлечь ваше приложение из Dockerfile. Если вы перезапустите docker build
, и ничего в вашем Dockerfile не изменилось, то Docker также пропустит шаг scp
, даже если удаленный контент изменил .
Моя общая рекомендация заключается в том, чтобы скопировать этот контент из-за пределов Dockerfile, а затем собрать его
# Using whatever credentials are in your local ssh-agent
scp -r user@hostname:/path/to/stuff dist/
# Then your Dockerfile doesn’t need scp or credentials
docker build .
Ваш Dockerfile не нуждается в куче дополнительных пакетов, которые имеют отношение только к этому пути: вы должны быть в состоянии удалить sudo
openssh-server
openssh-client
xtail
curl
gnupg
git
фактически не затрагивая единственный основной процесс, который вы пытаетесь запустить внутри своего контейнера.