У меня есть папка с именем Test, а файлы в папке следующие:
Тест
- test_002.sql
- Dockerfile
- docker-compose.yml
содержание Dockerfile следующим образом -
FROM mysql:5.6.40
COPY . /Test
содержимое docker-compose.yml показано ниже -
version: '3'
services:
test_db:
build: .
image: test_env
container_name: test_env
tty: true
volumes:
- .:/Test
environment:
MYSQL_DATABASE: 'test_db'
MYSQL_ROOT_PASSWORD: 'test_root_pwd'
MYSQL_PASSWORD: 'test_pwd'
MYSQL_USER: 'root'
Теперь я объясню последовательность шагов, которые я сделал. шаг 1:
docker-compose up --build
Это создало новый контейнер докеров, который запущен и работает
шаг 2:
Затем я попал внутрь док-контейнера docker exec -it <container-ID> bash
step3:
Внутри контейнера докеров у меня есть файл дампа mysql test_002.sql в папке Test. Я загрузил дамп mysql как mysql -uroot -ptest_root_pwd test_db < Test/test_002.sql. Затем тестовая база данных загружается со всеми таблицами и тестовыми данными в таблицы.
step3_check:
Проверка, загрузил ли шаг 3 тестовые данные дампа mysql в пустую базу данных (созданную, когда docker-compose up выполняется на шаге 1) -
mysql -uroot -psecret
use test_db;
show tables;
Я вижу все таблицы внутри test_db и тестовые данные внутри каждой таблицы, полученные из файла дампа mysql (test_002.sql). Все идет нормально.
step4:
Теперь я хотел создать новое изображение с таблицами и тестовыми данными, загруженными в test_db. Итак, я сделал docker container commit <container-ID> <Image:Tag>. Это создало новый образ (который предположительно должен содержать test_db со всеми таблицами и тестовыми данными)
step5:
Я нажимаю только что созданный образ докеры Image:Tag в dockerhub.
step6:
С другой машины я извлек этот образ докера Image:Tag и запустил контейнер докера, основанный на этом недавно извлеченном образе docker run Image:Tag. Затем создается новый контейнер докеров, который работает, как на шаге 1.
step7: В этом недавно созданном контейнере докеров из шага 6 я сделал следующее:
mysql -uroot -psecret
use test_db;
show tables;
Результат - Empty set (0.00 sec).
Где все таблицы и тестовые данные? Я думал, что загрузился в test_db и создал новый образ с изменениями, используя docker commit. По-видимому, в образе докера, который я вставил в концентратор докера, нет тестовых данных.
Любая идея, почему это произошло, или какие-либо предложения о том, как загрузить test_db с тестовыми данными и заморозить это как изображение докера и вытащить его с любого другого компьютера
Другими словами, если я извлечу Image:Tag из концентратора докеров, все контейнеры, созданные из этого образа, должны иметь базу данных mysql с именем test_db со всеми загруженными таблицами и тестовыми данными.
Спасибо,
Можете ли вы попробовать вызвать фиксацию с дополнительным флагом изменения, например docker commit --change?
@namokarm docker commit --change <ID контейнера> <Изображение: Тег> выдает сообщение об ошибке от демона: Нет такого контейнера: <Image:Tag>






Каково содержимое
/var/lib/mysqlкак в локальном контейнере, так и в опубликованном образе?