2017-01-21 10 views
-1

Я новичок в Docker и пытаюсь запустить свое существующее изображение докеры kalilinux с postgresql & metasploit предустановлен на нем.Как запустить изображение докеры из файла Docker?

мой Dockerfile в настоящее время выглядит следующим образом:

FROM kalilinux/kali-linux-docker:latest 

RUN apt-get -y update && echo 'y' | apt-get install postgresql --fix-missing 
RUN echo 'y' | apt-get install metasploit-framework 

Это создает очень хорошо, однако, когда я запускаю его, он запускает заданные команды от моего образа Кали, а затем выключается. Я хотел бы, чтобы эти команды выполняются, а затем kalilinux открыть на моей машине с Postgre и Metasploit установлен, что-то вроде этого:

FROM kalilinux/kali-linux-docker:latest 

RUN apt-get -y update && echo 'y' | apt-get install postgresql --fix-missing 
RUN echo 'y' | apt-get install metasploit-framework 
# Pseudo code below 
CMD docker run kalilinux/kali-linux-docker 

Вот оригинал блога с официального сайта Kalis я изначально придерживалась, чтобы setup kali linux: Kali Linux On Docker

спасибо.

+0

Я думаю, что это первый [тег: kali- linux], который когда-либо был довольно немного чуть ли не по теме. Congrats. – Will

ответ

2

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

CMD ["/bin/bash"] 

С, что на месте, если вы должны были бежать:

docker build -t myimage . 

А потом , как только ваше изображение будет построено, запустите:

docker run -it myimage 

В итоге вы получите интерактивную оболочку. Это то, что вы хотите? Обратите внимание, что, конечно, postgresql не будет работает; вы его установили, но вы не выдали никаких команд, которые начинаются. Другим подходом было бы, чтобы ваше изображение начинало postgres по умолчанию, а затем используйте docker exec для получения интерактивной оболочки в контейнере после ее запуска.

Есть другие способы приблизиться к этому, но это действительно зависит от того, что вы пытаетесь сделать.

+0

Спасибо, я знаю, что postgresql не будет работать, если бы я хотел, чтобы это было, я бы выпустил CMD для запуска его в файле Docker. Для меня **, похоже, просто добавление аргумента -it в команду run дало мне то, что мне было нужно **. –

+0

Что касается флагов '-i' и' -t', вы можете найти [этот ответ] (http://stackoverflow.com/a/41732542/147356) полезным. – larsks

0

вы можете создать post_install.sh скрипт, поместите его в папку dockerfile, скопируйте его в вашем экземпляре докер, а затем выполнить его:

ADD post_install.sh/
WORKDIR/
CMD ["/post_install.sh"] 
+0

умная идея, я буду помнить об этом –