Я сбрасываю базу данных в дамп sql:
docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -ppassword' > all-databases.sql
Затем я использую Dockerfile для создания образа mysql и запускаю его как контейнер:
FROM mysql:5.6.41
# needed for intialization
ENV MYSQL_ROOT_PASSWORD=whateverPassword
ADD all-databases.sql /docker-entrypoint-initdb.d/
EXPOSE 3306
Когда я запускаю контейнер, если я выполняю операцию в контейнере, могу ли я получить доступ к файлу all-databases.sql и посмотреть содержимое моей базы данных в виде открытого текста в изображении докеров?
В настоящее время, если я заглядываю в /docker-entrypoint-initdb.d/
он говорит all-databases.sql, но я не знаю, где этот файл хранится/если он зашифрован.
Если вы выполняете docker exec
в контейнере, файл будет незашифрованным. (Это просто текстовый файл, и вы можете посмотреть на него more
на большинстве баз изображений).
Однако, если вы можете вообще запускать любую команду Docker, тогда обычно тривиально, чтобы получить неограниченный доступ root к системе. (Рассмотрите возможность использования docker run -v/etc: /host-etc
чтобы добавить себя в /etc/sudoers
или разрешить вход для root без пароля.)
Также помните, что любой, у кого есть изображение, может docker run
его и посмотреть там файл, если это имеет значение для вашей безопасности. Если вы все равно ищете один файл с корневым доступом в системе, вы можете найти его без особых усилий в /var/lib/docker
. Они также могут легко запускать docker history
чтобы увидеть пароль root базы данных, который вы установили.