Node.js Docker compose knex脚本错误
我的docker compose文件如下所示:Node.js Docker compose knex脚本错误,node.js,docker,docker-compose,knex.js,Node.js,Docker,Docker Compose,Knex.js,我的docker compose文件如下所示: version: '2' services: web: build: context: . image: myimage environment: - AWS_REGION=region - NODE_ENV=development command: bash -c "sleep 10 && npm run knex migrate:latest --knexf
version: '2'
services:
web:
build:
context: .
image: myimage
environment:
- AWS_REGION=region
- NODE_ENV=development
command: bash -c "sleep 10 && npm run knex migrate:latest --knexfile src/knexfile.js"
depends_on:
- db
db:
image: mysql
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=root
- MYSQL_PASSWORD=root
- MYSQL_DATABASE=mydb
volumes:
- /var/lib
我的想法是,当我制作docker compose时,它会生成mysql,同时也会生成链接,我的要求是,当myImage生成时,我需要执行一些knex迁移。
尝试了两种方法:
npm ERR! missing script: knex
非常感谢您对上述内容的任何建议。运行package.json时,您的目录是否正确?
npm run missing script
给出一个错误npm ERR!缺少脚本:如果脚本不存在,则缺少脚本
您的package.json中有knex脚本吗?
在尝试运行迁移之前,您是否运行了npm install
?
可能不是这个,但如果从package.json中正确找到knex
脚本,则可能需要这个脚本
您可能需要添加--以便能够将参数传递给npm运行脚本
依赖项是作为docker构建的一部分安装的,或者我攻击了容器并尝试在那里安装npm,但这不允许我这样做,当所有其他依赖项都安装好时,knex没有安装的原因是什么。我更新了答案,我的第一个想法显然是错的,但是运气不好。脚本中没有“knex”:“knex”在package.json中,我添加了它,然后重试。2.还尝试了:command:bash-c“sleep 10&&npm运行knex--migrate:latest--knexfile src/knexfile.js”3。我在应用程序目录中,当我在没有docker的情况下运行同一个knex命令时,我在该目录中运行了该命令……但错误显示:web_1 | sh:1:knex:not found web_1 | npm info lifecycleimage@1.0.0~knex:无法执行knex脚本。发现问题的原因是环境设置不正确,因此没有选择依赖项但令人惊讶的是,它现在正试图使用npm安装mysql来安装mysql:工作目录更改为/app/src web|1;使用环境:development web|1 | Knex:run web|1 |$npm安装mysql——save web|1 |错误:在Function.module.处找不到模块'mysql'web|1。|解析文件名(module.js:489:15)web|u 1 | at Function.Module._load(Module.js:439:25)web|u 1 | at Module.require(Module.js:517:17)
scripts: {
knex: "knex"
}
npm run knex -- migrate:latest --knexfile src/knexfile.js