Docker文件
FROM ubuntu:18.04
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN apt-get update && apt-get install -y \
curl \
git \
make \
sudo
RUN sudo useradd -m -p $(openssl passwd -1 1) me
USER me
WORKDIR /home/me
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash \
&& . $HOME/.nvm/nvm.sh && nvm install 8.12.0
RUN mkdir myvol && touch myvol/TEST
VOLUME myvol
然后构建图像:
docker build ./ -t nodejs
然后启动新容器:
docker run -it --rm --name nodejs nodejs:latest bash
现在我可以看到我在docker空间中创建了一个匿名卷:
/ var / lib / docker / volumes / 39459a1b2cf16e9d2dc2fe8fa5261186a02af75410a0e63f39e17e6e63b3ffe0
当我做:
sudo ls -asl /var/lib/docker/volumes/39459a1b2cf16e9d2dc2fe8fa5261186a02af75410a0e63f39e17e6e63b3ffe0/_data
我没有看到测试文件!未命名的卷为空!
就像文档所说的那样:
The docker run command initializes the newly created volume with any data that exists at the specified location within the base image.
为什么我看不到该卷中的预先存在的内容?
Dockerfile中的VOLUME规范需要绝对路径,而不是相对路径:
VOLUME /home/me/myvol
就是说,我倾向于建议不要在Dockerfile中声明一个卷,因为当用户未如您在此处看到的那样显式声明该卷时,它破坏了下游用户扩展映像的能力并导致了匿名卷。相反,首选docker-compose.yml示例。
我还建议不要使用像nodejs:latest
您的映像这样的名称,因为它可能与上游映像冲突,并且有人认为它可能是官方的docker映像。使用带有用户名前缀的图像名称,linderman/nodejs:latest
以避免潜在的冲突。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句