我读过关于使用码头的教程:
docker run -it -p 9001:3000 -v $(pwd):/app simple-node-docker但如果我用:
docker run -it -p 9001:3000 simple-node-docker它也起作用了吗?不需要更多的-v?还是从Dockerfile取行WORKDIR?
FROM node:9-slim
# WORKDIR specifies the directory our
# application's code will live within
WORKDIR /app另一个教程在工作文件上使用mkdir ./app,其他教程则不使用,所以WORKDIR足以在不存在的情况下自动创建文件夹
发布于 2018-10-07 11:26:22
将应用程序内容放入Docker容器有两种常见的方法。我所见过的许多Node教程都是令人困惑的。您不需要docker run -v,只要您在进行更改时使用docker build容器。
第一种方法是将应用程序的静态副本复制到图像中。您可以通过Dockerfile这样做,通常如下所示:
FROM node
WORKDIR /app
# Install only dependencies now, to make rebuilds faster
COPY package.json yarn.lock ./
RUN yarn install
# NB: node_modules is in .dockerignore so this doesn't overwrite
# the previous step
COPY . ./
RUN yarn build
CMD ["yarn", "start"]生成的Docker映像是独立的:如果您只有映像(可能是从存储库中docker pull编辑的),您可以运行它,正如您注意到的,没有任何特殊的-v选项。这条路径的缺点是,如果您做了任何更改,则需要重新运行docker build来重新创建映像。
第二种方法是使用docker run -v将当前源目录注入容器。例如:
docker run \
--rm \ # clean up after we're done
-p 3000:3000 \ # publish a port
-v $PWD:/app \ # mount current directory over /app
-w /app \ # set default working directory
node \ # image to run
yarn start # command to run此路径隐藏映像中/app目录中的所有内容,并将其替换为当前目录中的任何内容。这要求您有一个构建的应用程序源代码树的功能副本,因此它支持诸如实时重新加载;有助于开发,而不是您想要的在生产中的Docker。
就像我说的,我见过很多教程同时做了两件事:
# First build an image, populating /app in that image
docker build -t myimage .
# Now run it, hiding whatever was in /app
docker run --rm -p3000:3000 -v$PWD:/app myimage您不需要-v选项,但如果应用程序更改,则需要手动重新构建。
$EDITOR src/file.js
yarn test
sudo docker build -t myimage .
sudo docker run --rm -p3000:3000 myimage正如我在这里所指出的,docker命令需要与根等效的权限;但另一方面,最终的docker run命令非常接近于“真正”运行的内容(可能通过Docker或Kubernetes运行,但不需要应用程序源代码的副本)。
https://stackoverflow.com/questions/52686534
复制相似问题