2017-02-02 3 views
2

Я запускаю контейнер докера локально, чтобы устранить его состояние. Я не всегда хочу выполнить RUN/ENTRYPOINT, я часто хочу попасть в запущенный контейнер, сделать некоторые вещи, а затем запустить RUN/ENTRYPOINT.Как установить историю команд в файле Docker

Было бы очень удобно иметь RUN/ENTRYPOINT после I docker run bash, просто нажав клавишу «вверх». Поэтому я подумал, что было бы неплохо, если бы я смог изменить историю с history -s ... в Dockerfile. Таким образом, как только я напишу, и могу получить RUN/ENTRYPOINT.

Когда я кладу это в файле Docker, я получил эту ошибку:

/bin/sh: 1: history: not found 

Есть ли способ, чтобы установить историю оргии в Dockerfile?

ответ

1

Вы получаете ошибку, так как команды RUN работают в /bin/sh, у которой нет команды history.

Для выполнения этой работы вам нужно запустить интерактивную оболочку bash во время сборки, поэтому она сохранит вашу запись истории.

RUN bash -ic 'history -s foobar' 

Это должно оставить файл истории с foobar как его самый последний (и, возможно, только) записи.

В процессе сборки вы увидите сообщение об ошибке ioctl ... это нормально, потому что интерактивный bash ожидает найти терминал, и его не будет. Но он все равно должен работать нормально.

bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell

Обратите внимание, что это будет сохранено для пользователя, которому вы выполняете команду как. Если ваше изображение переключается на пользователя, не являющегося пользователем root, с оператором USER, вы должны поместить его после строки USER, чтобы он хранился у пользователя, что ваше изображение работает как.

+0

Спасибо за ответ, я попробовал это, и когда я нажал, истории не было. Это был результат «истории», который был пустым. –

+0

@DanielKaplan Какой файл dockerfile вы используете? Я создаю простой файл docker с 'FROM ubuntu: последним' и этой командой RUN. Ранься это как «docker run -it myimage bash», и история работала в моем тесте. –

+0

Моя проблема была в том, что у меня была «RUN bash -ic» history -s foobar & ', мне нужно избегать & так: 'RUN bash -ic' history -s foobar \ & ', и это сработало. Спасибо –

Смежные вопросы