Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用--mount标志时Docker容器不运行_Node.js_Docker_Volume - Fatal编程技术网

Node.js 使用--mount标志时Docker容器不运行

Node.js 使用--mount标志时Docker容器不运行,node.js,docker,volume,Node.js,Docker,Volume,我只想创建一个docker容器,使用指南从官方Node.js图像中提取 我想做的唯一更改是将主机目录装载到容器中,以便在主机上创建新文件并在容器中更新它们 我尝试过各种建议:-v旗,-山旗等 但是当我在run命令中使用这些标志时,实际上没有容器运行 我运行以下命令: docker run -p 49160:8080 -d myname/node-web-app --mount source=/Users/myname/desktop/dockyard/enviro 它会弹出一个容器ID: 73

我只想创建一个docker容器,使用指南从官方Node.js图像中提取

我想做的唯一更改是将主机目录装载到容器中,以便在主机上创建新文件并在容器中更新它们

我尝试过各种建议:-v旗,-山旗等

但是当我在run命令中使用这些标志时,实际上没有容器运行

我运行以下命令:

docker run -p 49160:8080 -d myname/node-web-app --mount source=/Users/myname/desktop/dockyard/enviro
它会弹出一个容器ID:

7302055670c231fb41d04d6475d42405cbee834e37e0827a68d7c396a918d3ec
但是当我运行
docker ps
时,容器列表是空的

当我检查docker ps-a时,我可以看到它是以代码9退出的:

CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                         PORTS                    NAMES
dbf7973608a0        myname/node-web-app            "docker-entrypoint.s…"   4 seconds ago       Exited (9) 2 seconds ago                                quirky_sammet
我已经搜索了代码9的解释,但找不到任何东西

如果能提供任何帮助,我将不胜感激

更新

尝试:
docker run-p 49160:8080-d myimage-v/Users/myname/desktop/dockyard/enviro:/usr/src/main

容器退出,代码为0<代码>docker日志只返回
v11.15.0

我知道这意味着容器正在退出,因为没有进程,但是如果我在没有-v标志的情况下运行
docker run-p 49160:8080-d myimage
,容器运行得非常好

所以不确定-v标志为什么会导致退出(0)

Dockerfile根据Node.js教程:

FROM node:11

# Create app directory
WORKDIR /usr/src/main

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]

在调试时,您可能会发现
docker-run--interactive--tty
docker-run--detach
更容易

我认为你的
mount
语法有问题。我认为您需要
目标
,否则Docker引擎不知道在容器中映射目录的位置

我不太熟悉
--mount
语法,因此请尝试以下方法将本地目录(
/Users/myname/desktop/dockyard/enviro
)映射到容器目录(
/Users/myname

当容器退出时,您应该能够使用,例如:

docker logs dbf7973608a0
更新 你提供的应该有用;对我来说是的

我在
:8080
上创建了一个简单的Express服务器,并在主机目录中映射到容器

已创建index.js:

const express = require('express')
const app = express()
const port = 8080

app.get('/', (req, res) => res.send('Happy Birthday Freddie!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))
和package.json:

{
    "name": "test",
    "version": "0.0.1",
    "scripts": {
        "start": "node ./index.js"
    },
    "dependencies": {
        "express": "~4.17.1"
    }
}
然后构建|运行它:

docker build--tag=56822320。
码头工人赛跑\
--互动的\
--tty\
--发布=8080:8080\
--卷=${PWD}:/test\
56822320
它的工作原理是:

curl本地主机:8080
生日快乐,弗雷迪!
要证明映射有效,请执行以下操作:

docker运行\
--互动的\
--tty\
--发布=8080:8080\
--卷=${PWD}:/test\
56822320/bin/sh
#负载感应/测试
Dockerfile index.js package.json

你能提供容器日志吗?谢谢回复。已尝试
docker运行-p 49160:8080-d myimage-v/Users/myname/desktop/dockyard/enviro:/usr/src/main
,现在以代码0退出。日志只返回
v11.15.0
。如果我运行
dockerrun-p49160:8080-dmyimage
它工作正常。因此,不确定为什么卷标志会退出代码0。请在您的问题中添加更多详细信息,我将尝试重新设置。IIUC您需要运行一些Node.JS进程来保持容器运行。退出代码0是无错误的完成代码。也许这就是我们所缺少的?你的Dockerfile会很有见地的,所以很有效,非常感谢。我会想办法弄清楚这两者的区别到底是什么。我注意到一件事:如果我使用
--volume=${PWD}:/usr/src/main
而不是
--volume=${PWD}:/test
它抛出
错误:找不到模块“express”
。为什么express只适用于一条路径而不适用于另一条路径?不客气!在您的示例中,您有
WORKDIR/usr/src/main
,然后是
COPY package*.json./
。该副本中的
/
是指先前设置的
WORKDIR
,即
/usr/src/main
--volume
中的
${PWD}
也将当前目录映射到
/usr/src/main
。所以可能有一些冗余。最好不要尝试将包复制到容器中,而是让容器执行
npm安装
{
    "name": "test",
    "version": "0.0.1",
    "scripts": {
        "start": "node ./index.js"
    },
    "dependencies": {
        "express": "~4.17.1"
    }
}