2个进程在同一个端口?

我正在Docker容器中运行一个节点应用程序。

这是dockerfile

FROM maven:3.3.3-jdk-8 #install node RUN apt-get update RUN apt-get -qq update RUN apt-get install -y nodejs npm # TODO could uninstall some build dependencies RUN update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10 # Install packages for envsubst RUN apt-get update && apt-get upgrade -y --force-yes && rm -rf /var/lib/apt/lists/*; RUN apt-get update RUN apt-get install -y gettext-base # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # cache package.json and node_modules to speed up builds COPY src src COPY package.json package.json #COPY node_modules node_modules COPY pom.xml pom.xml COPY Gruntfile.js Gruntfile.js COPY gulpfile.js gulpfile.js COPY settings.xml settings.xml # Substitute dependencies from environment variables COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] EXPOSE 8000 

entrypoint.sh

 #!/bin/sh rm -rf /usr/src/app/src/js/app.js envsubst < "/usr/src/app/src/js/envapp.js" > "/usr/src/app/src/js/app.js" mvn clean install -DskipTests -s settings.xml exec npm start 

当我进入容器,我看到有两个不同的PID运行在这个容器上

 root@63387c253612:/usr/src/app# ps aux | grep '8000' root 158 0.0 0.0 4332 648 ? S 13:54 0:00 sh -c http-server -a 0.0.0.0 -p 8000 root 159 0.1 0.7 668520 15260 ? Sl 13:54 0:00 node /usr/src/app/node_modules/.bin/http-server -a 0.0.0.0 -p 8000 root 168 0.0 0.0 12808 976 ? S+ 13:55 0:00 grep 8000 

这是预期的吗?

这并不意味着它们都在8000上进行监听。这意味着它们有参数在8000上进行监听。在这种情况下,有一个叫做sh -c http-server ...的包装程序,即调用node /usr/src

您应该使用lsofnetstat来查看实际打开的内容,或者检入/ proc。