[英]Docker container does not run when using --mount flag
我只想创建一个docker容器,使用此处的指南从官方Node.js映像中提取。
我要做的唯一更改是我想将主机目录挂载到容器中,以便可以在主机上创建新文件并在容器中进行更新。
我在这里尝试了所有建议:-v标志,--mount标志等。
但是,当我将这些标志与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的解释,但找不到任何东西。
非常感谢您可以提供的任何帮助。
UPDATE
尝试过: docker run -p 49160:8080 -d myimage -v /Users/myname/desktop/dockyard/enviro:/usr/src/main
容器以代码0退出。 docker logs
仅返回v11.15.0
我知道这意味着容器由于没有进程而退出,但是如果我运行docker run -p 49160:8080 -d myimage
而没有-v标志,则容器运行得很好。
因此,不确定为什么-v标志会导致退出(0)。
根据Node.js教程的Dockerfile:
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 --interactive --tty
docker run --detach
更容易。
我认为您的mount
语法很糟糕。 我认为您需要source
和target
否则Docker Engine不知道将目录映射到容器中的位置。
我对--mount
语法不太熟悉,因此请尝试以下操作将本地目录( /Users/myname/desktop/dockyard/enviro
)映射到容器的目录( /Users/myname
)
--volume=/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 .
docker run \
--interactive \
--tty \
--publish=8080:8080 \
--volume=${PWD}:/test \
56822320
它的工作原理是:
curl localhost:8080
Happy Birthday Freddie!
为了证明该映射有效:
docker run \
--interactive \
--tty \
--publish=8080:8080 \
--volume=${PWD}:/test \
56822320 /bin/sh
# ls /test
Dockerfile index.js package.json
HTH!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.