首页 > 解决方案 > Docker:启动服务器后节点服务器未运行

问题描述

我有一个Dockerfile和一个docker-compose.yml文件。如果我执行docker-compose up,它会返回:

    Creating network "demoapi_webnet" with the default driver
    Creating demoapi_web_1 ... done
    Creating d2c_postgres  ... done
    Attaching to demoapi_web_1, d2c_postgres
...
d2c_postgres | 2020-07-28 00:47:48.772 UTC [1] LOG:  database system is ready to accept connections

但是我的节点服务器没有启动。这些是我的 docker 配置文件:

Dockerfile

FROM node:12.13-alpine As development
WORKDIR /app
COPY package.json .
COPY package-lock.json .
RUN npm install
COPY dist .
COPY wait-for-it.sh .
CMD ["npm", "run", "start"]

码头工人-compose.yml

version: '3'
services:
    db:
        image: postgres
        networks: 
            - webnet
        container_name: "d2c_postgres"
        environment:
            POSTGRES_PASSWORD: 010203
            POSTGRES_USER: postgres
            POSTGRES_DB: demo
        ports:
            - "5432:5432"
    web:
        image: nest-app
        ports: 
            - "3000:3000"
        networks:
            - webnet
        environment: 
            DB_HOST: db
        command: ["./wait-for-it.sh", "db:5432", "--", "npm", "run", "start"]
networks:
    webnet:

我唯一的线索是这一行: env: can't execute 'bash': No such file or directory

我可以使用该配置建立与 pgadmin/postgres 的连接,但node服务器没有启动。我做错了什么,我该如何解决?

标签: dockerdocker-composedockerfile

解决方案


Wait-for-it 基于bash并且它与 alpine 不兼容,因为 alpine 基于ash或者sh这就是你看到的原因can't execute 'bash': No such file or directory。您可以查看开放问题以获得 alpine 支持。

你可以制作一个 /bin/sh 版本以用于 alpine linux

对于高山,您可以使用等待

./wait-for是一个脚本,旨在同步 docker 容器等服务。它与sh 和 alpine 兼容

services:
  db:
    image: postgres:9.4

  backend:
    build: backend
    command: sh -c './wait-for db:5432 -- npm start'
    depends_on:
      - db

推荐阅读