Причина в том, что /var/lib/mysql
указан как VOLUME
в файле Docker.
Внесенные вами изменения сохраняются между командами docker stop <yourcontainer>
и docker start <yourcontainer>
.Но когда вы фиксируете контейнер, каждый каталог, помеченный как VOLUME
в Dockerfile, заменяется его исходным содержимым.(Это происходит, даже если вы не подключили внешний том к этому каталогу.) См. docker commit .
Вы можете легко проверить, что ваши другие изменения сохраняются в коммите, внося изменениягде-то за пределами VOLUME
каталогов.Например, запустите date>/mydate
внутри контейнера и затем подтвердите его.Когда вы затем запустите новый контейнер из этого образа, файл /mydate
все еще будет там.
Если вы хотите сохранить изменения базы данных, вы можете сделать это путем клонирования репозитория, а затем удалить строкуVOLUME /var/lib/mysql
из Dockerfile.Если вы затем создадите новый образ и запустите его, он сохранит изменения вашей базы данных при фиксации контейнера.
Обычно в производственной среде файлы базы данных монтируются либо в контейнере данных, либо на хосте.,Таким образом, данные базы данных будут сохранены в контейнере данных или на хосте, если вы подтвердите контейнер.