Docker端口转发为nodejs应用程序

我在为我的nodejs应用程序configurationdocker时遇到问题。

我以前已经为php和rails设置了容器,端口转发工作正常,但是对于这个例子,我似乎无法得到它的工作。

运行: docker ps ,我得到以下内容:

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a60f9c82d600 29c7d94a8c58 "/bin/sh -c 'npm s..." 5 seconds ago Up 3 seconds 3000/tcp romantic_albattani 

正如你可以看到我没有得到通常的:我期望的0.0.0.0:3000->3000/tcp

docker-compose ps给出:

 Name Command State Ports ------------------------------ 

我的docker-compose.yml:

 web: build: . volumes: - .:/app volumes_from: - box ports: - "3000:3000" box: image: busybox volumes: - /node_modules 

我的Docker文件:

 FROM node:8.7.0 # The base node image sets a very verbose log level. ENV NPM_CONFIG_LOGLEVEL warn WORKDIR /tmp COPY package.json /tmp/ RUN npm install WORKDIR /app ADD . /app RUN cp -a /tmp/node_modules /app/ #ENV PORT=3000 EXPOSE 3000 CMD npm start 

我正在运行命令: docker-compose up --build

任何帮助在这一点上表示赞赏。

我不知道docker检查是否有用,但如果是这样,告诉我,我也会张贴它。

编辑:更改我的Dockerfile以遵循答案。

docker-compose.yml文件的格式不好,因为你没有得到任何错误,我会假设你把它粘贴在这里错了,这里是固定缩进的版本:

 web: build: . volumes: - .:/app volumes_from: - box ports: - "3000:3000" box: image: busybox volumes: - /node_modules 

你的Dockerfile有一个错误,你错过了ENTRYPOINT和/或CMD节,而是用错误的意图使用RUN节,下面是一个正在工作的Dockerfile ,应用了修补程序:

 FROM node:8.7.0 # The base node image sets a very verbose log level. ENV NPM_CONFIG_LOGLEVEL warn WORKDIR /tmp COPY package.json /tmp/ RUN npm install WORKDIR /app ADD . /app RUN cp -a /tmp/node_modules /app/ #ENV PORT=3000 EXPOSE 3000 CMD npm start 

您的Dockerfile暂停Dockerfile docker-composeDockerfile映像构build阶段的执行,因为RUN npm start是一个启动并监听直到停止的进程(因为您希望它启动节点应用程序并侦听连接),从而导致docker-compose永远不会完成docker图像创build步骤,更不用说创build所需容器等其他步骤,并完成整个docker-compose运行时stream程。

简而言之:

当你使用RUN它意味着运行一个命令做一些工作,并返回某个时间来继续构build过程,它应该返回并退出代码0,并且该过程将移动到下一个Dockerfile节,或者返回另一个退出代码,并返回构build过程将失败并出现错误。

当你使用CMD你告诉docker镜像,从这个镜像启动的所有容器的启动命令是什么(它也可以在运行时用docker run来重写)。 它与ENTRYPOINT节紧密相关,但对于基本的用法,使用默认值是安全的。

进一步阅读: ENTRYPOINTCMDRUN