Docker 使用 --mount 标志时容器不会 运行
Docker container does not run when using --mount flag
我只想创建一个 docker 容器,该容器使用 found here.
指南从官方 Node.js 图像中提取
我想做的唯一改变是我想将我的主机目录挂载到我的容器中,这样我就可以在主机上创建新文件并在容器中更新它们。
我已经尝试了所有建议here:-v 标志、--mount 标志等
但是当我将这些标志与 运行 命令一起使用时,实际上没有容器 运行s.
我运行以下:
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 logs
只需 returns v11.15.0
我知道这意味着容器正在退出,因为没有进程,但是如果我 运行 docker run -p 49160:8080 -d myimage
没有 -v 标志,容器 运行 完全没问题。
所以不确定为什么 -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
语法很乏味。我认为您需要 source
和 target
否则 Docker 引擎不知道将目录映射到容器中的何处。
我不太熟悉 --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!
我只想创建一个 docker 容器,该容器使用 found here.
指南从官方 Node.js 图像中提取我想做的唯一改变是我想将我的主机目录挂载到我的容器中,这样我就可以在主机上创建新文件并在容器中更新它们。
我已经尝试了所有建议here:-v 标志、--mount 标志等
但是当我将这些标志与 运行 命令一起使用时,实际上没有容器 运行s.
我运行以下:
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 logs
只需 returns v11.15.0
我知道这意味着容器正在退出,因为没有进程,但是如果我 运行 docker run -p 49160:8080 -d myimage
没有 -v 标志,容器 运行 完全没问题。
所以不确定为什么 -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
语法很乏味。我认为您需要 source
和 target
否则 Docker 引擎不知道将目录映射到容器中的何处。
我不太熟悉 --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!