Я пытаюсь настроить тест e2e.Для этого мне нужна локальная тестовая база данных, предпочтительно в Docker, чтобы настройка теста была простой.Вот минимальный проект, показывающий, что у меня сейчас есть: https://gitlab.com/MakotoE/mysql-test Если эта проблема исправлена, npm test
завершится с кодом выхода 0. Это выполняется в Windows 10.
В main.js
, Я запускаю экземпляр образа Docker mysql:8.0
следующим образом:
const command = 'docker run -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 -d mysql:8.0';
ChildProcess.execSync(command);
Я хочу подключиться к нему с помощью mysql2
, но это не удается с Error: connect ETIMEDOUT
.
await mysql.createConnection({
host: 'localhost',
user: 'root',
});
Если я пытаюсь подключиться к базе данных, созданной в коде JavaScript, через командную строку (mysql -uroot
), я получаю эту ошибку: ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
.Если я создаю контейнер в командной строке с помощью той же команды docker run
, которая использовалась в коде, я могу успешно подключиться, поэтому эта проблема может быть связана с ChildProcess.execSync
, но я не знаю, как это исправить.
Как я могу исправить свой код, чтобы я мог запустить сервер MySQL в Docker и подключиться к нему в Node.js, работающем в Windows 10?
Редактировать: Я не уверен, связано ли это, но при запуске этого в Debian появляется следующее сообщение об ошибке при создании контейнера:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock:
Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/57f5b631e551466e1f9928ba62f7a5e2a5ad2a481da4686bda8684f1a71b8d7/stop: dial unix /var/run/docker.sock: connect: permission denied
И соединение не устанавливается с ETIMEDOUT
.
Редактировать: я добавил ветку secondAttempt
, где я безуспешно пыталсязапуск всех команд вне файла .js через сценарии NPM.После запуска теста для этой ветви вы должны вручную остановить контейнер Docker.
В команде mysql -uroot
она завершается с ошибкой:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
, что, как я считаю, является той же ошибкой, что иопыт работы с разными сообщениями (из-за разных клиентов).
Этот эксперимент говорит мне две вещи: ChildProcess.execSync
не является основной причиной этой проблемы, и что что-то есть в этой системе (будь тоDocker или TCP-соединение с Docker), которое предотвращает выполнение команд по сценарию.