Мой Dockerfile выглядит примерно так.
FROM postgres:12.2
RUN apt-get install -y postgresql-12-cron \
&& echo "shared_preload_libraries = 'pg_cron'" >> \
/var/lib/postgresql/data/postgresql.conf
Установлен пакет postgresql -12-cron, хотя он ворчит о debconf и не может найти Dialog ... когда я запускаю c в созданный контейнер я вижу, что пакет находится там.
Однако эхо-строка не появляется в конце файла конфигурации. Я подумал, что apt-get может возвращать некоторый ненулевой код завершения, что заставит && не переходить к следующему оператору. Я добавил эту строку ниже:
RUN echo "shared_preload_libraries = 'pg_cron'" >> /var/lib/postgresql/data/postgresql.conf
Это производит вывод во время сборки, который выглядит примерно так:
Step 7/7 : RUN echo "shared_preload_libraries = 'pg_cron'" >> /var/lib/postgresql/data/postgresql.conf
Однако после запуска и выполнения c -ing в контейнере , в конфигурационном файле до сих пор нет добавленных строк.
Я смутно знаю о другом сценарии ios, где это происходит, и это не синтаксическая ошибка или что-то в этом роде, а неправильное представление со стороны человека, пишущего Dockerfile о том, как это работает. Но я в Google пустую. Что мне не хватает?
Примечание. Это упрощенная версия файла Docker, я пытаюсь отобразить больше строк, чем показано в примере (ни одна из них не появилась).
Обновление: я добавил следующую строку -
&& tail -n 10 /var/lib/postgresql/data/postgresql.conf
Она выдаст следующий вывод:
shared_preload_libraries = 'pg_cron'
cron.database_name = 'kardashev'
Над этим должно быть 8 строк (файл конфигурации довольно массивный). Но ничего на выходе. На данный момент файл пуст, и мое создание файла сдувается еще до того, как контейнер действительно запустится. Тьфу. Все еще не понимая, что это значит, хотя я помню кое-что за несколько лет go.