Я установил mysql8 с помощью докера, следуя официальному руководству docker mysql начало работы
docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=xxx -d mysql:8.0
И заметил следующие явления:
- Я не использовал громкость
-v
вdocker run
команда, но после остановки и запуска я вижу, что база данных и данные, которые я добавил, все еще там. (Я обнаружил в учебных пособиях, что без данных спецификации тома будут отсутствовать после перезапуска контейнера) - у пользователя root нет
'%'
как разрешенный домен, но он может каким-то образом войти на сервер mysql следующим образом:
docker exec -it mysql8 mysql -uroot -p
находится ли хост-сервер как-то в том же домене, что и сервер mysql?
- хотя я могу войти в mysql на хосте, используя учетную запись root, и у меня есть файл some.sql на хосте
pwd
папка, но я не могу запуститьsource some.sql
в mysql cli. Я думаю, это потому, что они не находятся в одном домене, и mysql не видит файл some.sql внутри своего контейнера.
Пожалуйста, помогите объяснить 3 пункта выше. Благодарю.
1 ответ
Я не использовал volume -v в команде запуска docker, но после остановки и запуска я вижу, что база данных и данные, которые я добавил, все еще там. (Я обнаружил в учебных пособиях, что без данных спецификации тома будут отсутствовать после перезапуска контейнера)
Данные сохранятся после перезапуска контейнера, но не после его удаления и повторного создания. Это не повлияет на объем.
находится ли хост-сервер как-то в том же домене, что и сервер mysql?
Вы выполняете эту команду в контейнере, а не на хосте, поэтому с точки зрения сервера MySQL соединение исходит от localhost
. Вы могли бы использовать mysql
клиент установлен на хосте или в другом контейнере, чтобы установить соединение, и это не сработает.
Я думаю, это потому, что они не в одном домене
Это не имеет значения.
и mysql не видит файл some.sql внутри своего контейнера.
Это точно. Контейнер изолирован от хоста. Он не может получить доступ к своей файловой системе. В этом суть контейнеризации: вы хотите, чтобы все работало изолированно от хоста и не влияло на него.
Вы можете поделиться файлом или каталогом с помощью тома (-v /some/dir/on/host:/some/dir/in/container
) или скопируйте файл с docker cp
.
Очень ясно, спасибо
— Тиина
4 часа назад