Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Docker compose-无法连接到mysql-mysql之前的应用程序构建?_Node.js_Docker_Docker Compose - Fatal编程技术网

Node.js Docker compose-无法连接到mysql-mysql之前的应用程序构建?

Node.js Docker compose-无法连接到mysql-mysql之前的应用程序构建?,node.js,docker,docker-compose,Node.js,Docker,Docker Compose,我有一个docker compose文件旋转了3个应用程序。mysql,phpmyadmin&一个nodejs应用程序。您将在下面找到撰写文件 nodejs应用程序具有sequilizeJS,需要在初始化时运行migration&seed命令 当我运行docker compose up--build时,构建失败,因为mysql返回时出现错误getaddrinfo ENOTFOUND mysql 我无法找出我在撰写文件中做错了什么,因为它看起来对我来说没有问题 phpmyadmin和auth应用程

我有一个docker compose文件旋转了3个应用程序。mysql,phpmyadmin&一个nodejs应用程序。您将在下面找到撰写文件

  • nodejs应用程序具有sequilizeJS,需要在初始化时运行migration&seed命令
  • 当我运行docker compose up--build时,构建失败,因为mysql返回时出现错误
    getaddrinfo ENOTFOUND mysql
  • 我无法找出我在撰写文件中做错了什么,因为它看起来对我来说没有问题
  • phpmyadmin
    auth
    应用程序都需要
    mysql
    ,因此我将
    mysql
    添加到
    依赖部分。从日志文件中可以看出,composer在创建
    mysql
    之前尝试构建
    auth

    日志 Dockerfile docker-compose.yml
    Dockerfile
    永远无法访问
    docker compose.yml
    中声明的数据库、卷或其他资源(在该服务的即时
    生成:
    块之外)。构建作为一个单独的阶段运行;它不会连接到Compose网络

    (想象一下在一个系统上运行
    docker build;docker push
    ,在另一个系统上指定匹配的
    image:
    。在这个设置中,构建时系统无法访问运行时数据库,这是您应该考虑的基本模型。更直接地说,您可以删除并重新创建
    mysql
    容器,而无需重建
    auth
    图像。)

    执行此操作的典型模式是编写入口点脚本。这将成为容器运行的主命令;它将通过Dockerfile
    CMD
    (或Docker Compose
    命令:
    )作为命令行参数。由于它在容器启动时运行,因此它确实可以访问数据库、网络、环境变量等

    !/bin/sh
    设置-e#在出现任何错误时停止
    npm运行迁移#运行迁移
    npm运行种子#预加载初始数据
    exec“$@”#将该命令作为主容器进程运行
    
    Dockerfile
    中,将此脚本作为
    ENTRYPOINT
    。您必须在此处使用
    ENTRYPOINT
    的JSON数组形式

    来自节点:12.14.0
    WORKDIR/var/www
    #首先安装依赖项以节省重建时间
    复制package.json。
    运行npm安装
    复制
    曝光3001
    如果需要,运行chmod+x entrypoint.sh
    入口点[“/”入口点.sh“]
    CMD[“npm”,“开始”]
    
    Dockerfile
    永远无法访问
    docker compose.yml
    中声明的数据库、卷或其他资源(在该服务的即时
    构建:
    块之外)。构建作为单独的阶段运行;它不会连接到compose网络

    (想象一下在一个系统上运行
    docker build;docker push
    ,在另一个系统上指定匹配的
    image:
    。在这个设置中,构建时系统无法访问运行时数据库,这是您应该考虑的基本模型。更直接地说,您可以删除并重新创建
    mysql
    容器,而无需重建
    auth
    图像。)

    执行此操作的典型模式是编写入口点脚本。这将成为容器运行的主命令;它将通过Dockerfile
    CMD
    (或Docker Compose
    命令:
    )作为命令行参数。由于它在容器启动时运行,因此它确实可以访问数据库、网络、环境变量等

    !/bin/sh
    设置-e#在出现任何错误时停止
    npm运行迁移#运行迁移
    npm运行种子#预加载初始数据
    exec“$@”#将该命令作为主容器进程运行
    
    Dockerfile
    中,将此脚本作为
    ENTRYPOINT
    。您必须在此处使用
    ENTRYPOINT
    的JSON数组形式

    来自节点:12.14.0
    WORKDIR/var/www
    #首先安装依赖项以节省重建时间
    复制package.json。
    运行npm安装
    复制
    曝光3001
    如果需要,运行chmod+x entrypoint.sh
    入口点[“/”入口点.sh“]
    CMD[“npm”,“开始”]
    
    有道理!谢谢!有道理!谢谢!
    
    Creating network "updials-auth_default" with the default driver
    Building auth
    Step 1/8 : FROM node:12.14.0
     ---> 6b5991bf650f
    Step 2/8 : WORKDIR /var/www
     ---> Using cache
     ---> 21c89e8b8059
    Step 3/8 : COPY . .
     ---> 73072a4bddb5
    Step 4/8 : COPY package.json /usr/share/app
     ---> 886992b71802
    Step 5/8 : EXPOSE 3001
     ---> Running in cd7c14183427
    Removing intermediate container cd7c14183427
     ---> b93bcdf8c653
    Step 6/8 : RUN npm install
     ---> Running in 4b6d75b77bab
    npm WARN deprecated mkdirp@0.5.1: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
    npm WARN rm not removing /var/www/node_modules/.bin/rimraf as it wasn't installed by /var/www/node_modules/rimraf
    
    > bcrypt@3.0.8 install /var/www/node_modules/bcrypt
    > node-pre-gyp install --fallback-to-build
    
    node-pre-gyp WARN Using request for node-pre-gyp https download 
    [bcrypt] Success: "/var/www/node_modules/bcrypt/lib/binding/bcrypt_lib.node" is installed via remote
    
    > ejs@2.7.4 postinstall /var/www/node_modules/ejs
    > node ./postinstall.js
    
    Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)
    
    npm notice created a lockfile as package-lock.json. You should commit this file.
    added 18 packages from 3 contributors, removed 9 packages, updated 467 packages and audited 1563 packages in 51.173s
    
    22 packages are looking for funding
      run `npm fund` for details
    
    found 5 low severity vulnerabilities
      run `npm audit fix` to fix them, or `npm audit` for details
    Removing intermediate container 4b6d75b77bab
     ---> f3c15392ccc2
    Step 7/8 : RUN npm run migrate && npm run seed
     ---> Running in cd58f889c907
    
    > updials-auth@0.0.2 migrate /var/www
    > npx sequelize-cli db:migrate
    
    npx: installed 81 in 8.76s
    
    Sequelize CLI [Node: 12.14.0, CLI: 5.5.1, ORM: 5.21.5]
    
    Loaded configuration file "config/config.js".
    Using environment "development".
    
    ERROR: getaddrinfo ENOTFOUND mysql
    
    npm ERR! code ELIFECYCLE
    npm ERR! errno 1
    npm ERR! updials-auth@0.0.2 migrate: `npx sequelize-cli db:migrate`
    npm ERR! Exit status 1
    npm ERR! 
    npm ERR! Failed at the updials-auth@0.0.2 migrate script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /root/.npm/_logs/2020-03-29T15_36_20_888Z-debug.log
    ERROR: Service 'auth' failed to build: The command '/bin/sh -c npm run migrate && npm run seed' returned a non-zero code: 1
    
    
    FROM node:12.14.0
    #USER node
    WORKDIR /var/www
    
    COPY . .
    COPY package.json /usr/share/app
    #COPY package.lock.json /usr/share/app
    
    EXPOSE 3001
    RUN npm install
    RUN npm run migrate && npm run seed
    
    CMD ["npm", "start"]
    
    
    version: '3.7'
    
    services:
        mysql:
            container_name: updials-auth-mysql
            image: mysql:5.7
            environment: 
                MYSQL_ROOT_PASSWORD: 'password'
                MYSQL_DATABASE: 'updials'
                MYSQL_USER: 'updials'
                MYSQL_PASSWORD: 'password'
            volumes:
                - database:/var/lib/mysql
    
        auth:
            container_name: updials-auth
            restart: always
            depends_on: 
                - mysql
            build: .
            ports: 
                - '3001:5002'
            environment: 
                DB_HOST: 'mysql'
                DB_USER: 'updials'
                DB_PASS: 'password'
                DB_NAME: 'updials'
        phpmyadmin:
            container_name: phpmyadmin-updials-auth
            restart: always
            image: phpmyadmin/phpmyadmin:5.0.2
            depends_on: 
                - mysql
            environment: 
                MYSQL_USER: updials
                MYSQL_PASSWORD: password
            ports:
                - '4000:8080'
    volumes: 
        database:
            driver: local
            driver_opts: 
                type: 'none'
                o: 'bind'
                device: '/home/sisir/docker-databases/updials-auth'