node.js - 基于ubuntu创建nodejs容器Docker

标签 node.js ubuntu docker

我使用官方的nodejs 镜像创建了一个运行nodejs 应用程序的docker 容器。

但现在我想在 ubuntu:14.04 上创建相同的 docker 但我自己的基础,但它不起作用

Dockerfile mynode

FROM ubuntu:14.04

RUN apt-get update -y
RUN apt-get upgrade -y

RUN apt-get install nodejs -y
RUN apt-get install nodejs-legacy -y
RUN apt-get install npm -y

RUN npm install -g nodemon

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY ./prj/package.json /usr/src/app/
RUN  npm install
ADD ./prj /usr/src/app

EXPOSE  9977

# Run app using nodemon
CMD ["nodemon", "/usr/src/app/app.js"]

如果我将线路从 ubuntu:14.04 更改为 Node,它就可以正常工作。

但是现在如果我使用 docker-compose 来构建和运行容器,它就不起作用了。

node:
    restart: always
    build: ./mynodeFolder
    ports:
        - "9977:9977"

我有错误: enter image description here

现在,如果我使用带有 mynode DockerFile 的镜像构建并使用 docker run -it --rm myNewContainer bash然后使用 nodemon 启动我的应用程序,它运行完美!

所以一切都很好地安装并打包在我的 dockerimage 中,那么为什么它在使用 docker-compose 构建时不起作用

当我使用这个 DockerFile 时它现在可以工作了

# Set the base image to Ubuntu
FROM ubuntu:14.04

#FOR DEBUGGING  
RUN apt-get update -y
RUN apt-get upgrade -y

RUN apt-get install nodejs -y
RUN apt-get install nodejs-legacy -y
RUN apt-get install npm -y

# Install nodemon
RUN npm install -g nodemon

# Provides cached layer for node_modules
RUN mkdir -p /usr/src/app 

# Define working directory
WORKDIR /usr/src/app
ADD ./prj /usr/src/app
RUN npm install

# Expose port
EXPOSE  9977

# Run app using nodemon
CMD ["nodemon", "/usr/src/app/app.js"]

最佳答案

以下是官方 node 镜像的 Dockerfile: https://github.com/nodejs/docker-node/blob/5d433ece4d221fac7e38efbec25ffea2dea56286/5.2/Dockerfile

RUN set -ex && for key in 9554F04D7259F04124DE6B476D5A82AC7E37093B 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 FD3A5288F042B6850C66B31F09FE44734EB7990E 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 DD8F2338BAE7501E3DD5AC78C273792F7D83545D ; do gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done
ENV NPM_CONFIG_LOGLEVEL=info
ENV NODE_VERSION=5.2.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" && gpg --verify SHASUMS256.txt.asc && grep " node-v$NODE_VERSION-linux-x64.tar.gz\$" SHASUMS256.txt.asc | sha256sum -c - && tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 && rm "node-v$NODE_VERSION-linux-x64.tar.gz" SHASUMS256.txt.asc
CMD "node"

如果您转到http://imagelayers.io ,您可以看到该镜像的组合 Dockerfile,包括 buildpack-deps:jessie 基础镜像:

RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl wget && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y --no-install-recommends bzr git mercurial openssh-client subversion procps && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y --no-install-recommends autoconf automake bzip2 file g++ gcc imagemagick libbz2-dev libc6-dev libcurl4-openssl-dev libevent-dev libffi-dev libgeoip-dev libglib2.0-dev libjpeg-dev liblzma-dev libmagickcore-dev libmagickwand-dev libmysqlclient-dev libncurses-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libtool libwebp-dev libxml2-dev libxslt-dev libyaml-dev make patch xz-utils zlib1g-dev && rm -rf /var/lib/apt/lists/*
RUN set -ex && for key in 9554F04D7259F04124DE6B476D5A82AC7E37093B 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 FD3A5288F042B6850C66B31F09FE44734EB7990E 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 DD8F2338BAE7501E3DD5AC78C273792F7D83545D ; do gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done
ENV NPM_CONFIG_LOGLEVEL=info
ENV NODE_VERSION=5.2.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" && gpg --verify SHASUMS256.txt.asc && grep " node-v$NODE_VERSION-linux-x64.tar.gz\$" SHASUMS256.txt.asc | sha256sum -c - && tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 && rm "node-v$NODE_VERSION-linux-x64.tar.gz" SHASUMS256.txt.asc
CMD "node"

关于node.js - 基于ubuntu创建nodejs容器Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34318184/

相关文章:

node.js - 如何限制express api仅允许来自您的客户端的post请求?

javascript - 在 for 循环中链接 Mongoose promise

node.js - 如何使用 adapter.js 的 webRTC 适配器?

c - Ubuntu 和 CentOS 之间链接行为的差异

docker - 容器即使已开始使用-dit退出

javascript - NodeJS Passport - 如何打开新窗口进行身份验证?

django - 500 错误与 404 错误哪个更可取?

python - 带有 print json 的 Ffprobe 不打印任何内容

docker - 如何生成docker镜像Layer DiffID?

java - 如何使 curl 在基于 Docker 镜像的 java :8-jdk-alpine and keep the image clean? 中可用