我正在试着做e2e测试。为此,我需要一个本地测试数据库,最好是在Docker中,以便测试设置简单。以下是我目前拥有的一个最基本的项目:
https://gitlab.com/MakotoE/mysql-test
npm test
在里面
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',
});
mysql -uroot
),我得到这个错误:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
. 如果我在命令提示符下使用相同的
docker run
代码中使用的命令,我可以成功连接,所以这个问题可能与
ChildProcess.execSync
,但我不知道怎么才能解决这个问题。
编辑:我不确定这是否相关,但在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
我尝试通过NPM脚本在.js文件之外运行所有命令,但未成功。运行此分支的测试后,必须手动停止Docker容器。
mysql-uroot
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
这个实验告诉我两件事:
不是此问题的根本原因,并且此系统(无论是Docker还是到Docker的TCP连接)存在阻止脚本化命令的因素。