Node.js Docker compose knex脚本错误

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

我的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 --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迁移。 尝试了两种方法:

  • 如上所示,在docker compose文件中添加了命令
  • 在没有命令的情况下,旋转容器,然后猛击容器并尝试运行knex migrate命令
  • 应用程序映像在包json文件中对knex有依赖关系,我也可以在node modules目录中看到knex模块

    但是,无论哪种情况,我都会因为缺少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