【问题标题】:Dockerizing a Node.js app on microsoft/nanoserver在 microsoft/nanoserver 上 Dockerizing 一个 Node.js 应用程序
【发布时间】:2017-05-04 00:23:22
【问题描述】:

我是 Docker 新手。我们有一个基于节点的 REST 服务,我正在尝试创建一个 docker 映像,以便可以轻松地将服务部署到构建代理上。我有 CD 到我们有服务的 package.json 的文件夹,并添加到 docker 文件下面。我在 Win 10 build 14xxxx 上并使用 Docker windows 容器。我需要先拉出一个节点映像并将其安装在 nanoserver 上吗?

FROM microsoft/nanoserver

# Create app directory
RUN powershell New-Item -ItemType directory -Path \usr\src\app
WORKDIR \usr\src\app

# Install app dependencies
COPY package.json \usr\src\app
RUN npm install

# Bundle app source
COPY . \usr\src\app

EXPOSE 8080

CMD [ "npm", "start" ]

当我跑步时

docker build -t mycompany/node-engine

我遇到了错误

'npm' is not recognized as an internal or external command,
    operable program or batch file.

下面是完整的输出

Sending build context to Docker daemon 24.67 MB
Step 1/8 : FROM microsoft/nanoserver
 ---> a943c29f0046
Step 2/8 : RUN powershell New-Item -ItemType directory -Path \usr\src\app
 ---> Using cache
 ---> f1df2109ddd6
Step 3/8 : WORKDIR \usr\src\app
 ---> Using cache
 ---> 66d552a76612
Step 4/8 : COPY package.json \usr\src\app
 ---> Using cache
 ---> fcf9663854c3
Step 5/8 : RUN npm install
 ---> Running in b47b47ad1439
'npm' is not recognized as an internal or external command,
operable program or batch file.
The command 'cmd /S /C npm install' returned a non-zero code: 1

【问题讨论】:

  • 什么是“npm”,它是默认 microsoft/nanoserver 映像的一部分吗?
  • npm 是节点包管理器,它不是 nanoserver 映像的一部分。它是一个单独的应用程序,我们需要安装并设置 PATH 变量。
  • 那么你需要将它安装到镜像中。不知道你在这里问什么,因为你试图调用内部图像中还没有的东西
  • Oki,看来我需要将节点文件从我的主机复制到 nano 服务器并设置路径变量。我的下一个挑战是将文件复制到 nanoserver。我提取了图像并使用 docker run -t microsoft/nanoserver cmd 运行 nanoserver,并使用 ipconfig 找到了 IP 地址。然后使用 $ip = "172.23.198.86" $s = New-PSSession -ComputerName $ip -Credential ~\Administrator Enter-PSSession -Session $s 连接和复制文件,我得到一个身份验证错误。如何配置 nanoserver 凭据??
  • 1.您需要使用 Enter-PSSession -RunAdministrator 以管理员权限登录到容器。更大的图景是我认为你没有完全理解容器是如何工作的。即使你将它复制到容器中,它也不会留在那个正在运行的映像中,除非你提交了你不想做的事情。在此处查看我的演练,这可能更容易理解github.com/artisticcheese/artisticcheesecontainer/wiki

标签: node.js docker nano-server windows-container


【解决方案1】:

看起来您可以利用他们添加到 Nano 图像中的新命令:

curl.exe 和 tar.exe(谢谢 Unix)

FROM mcr.microsoft.com/windows/nanoserver:1809

#Download the package we want and unzip it to our destination
RUN curl.exe -o node.zip https://nodejs.org/dist/v9.2.0/node-v9.2.0-win-x64.zip && \
  mkdir "C:\\Program Files\\node" && \
  tar.exe -xf node.zip -C "C:\\Program Files\\node" --strip-components=1

#Add node to PATH
ENV PATH “C:\\Program Files\\node:%PATH%”

#Start Node
#CMD [ “node.exe” ]

【讨论】:

    【解决方案2】:

    我知道我在这里聚会迟到了,但我来这里是为了寻找同一个问题的答案。

    后来研究了一下,发现大家搭建的第三方node+server nano docker镜像有很多种。

    例如,这看起来很干净: https://github.com/a11smiles/docker-nano-nodejs/blob/master/Dockerfile

    如果您在使用有点随机/不受支持的 docker 镜像而不是官方镜像(许多商业组织这样做)时遇到问题,您至少可以查看 Dockerfile 并了解它是如何完成的(并可能注明来源:)

    【讨论】:

      【解决方案3】:

      在 docker hub 中有一个用于此目的的图像,您只需要使用这个构建在 nano 服务器之上的图像:

      https://hub.docker.com/r/compulim/nanoserver-node/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-07
        • 2018-06-17
        • 1970-01-01
        • 1970-01-01
        • 2021-09-30
        • 2020-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多