为什么docker build后node_modules为空?

为什么我的docker数据卷在主机系统上是空的?

docker-compose up完成时,我可以执行到node_modules容器中,查看node_modules目录,在那里我可以看到所有的模块安装成功。 但是当我检查我的主机上的node_modules目录时,我什么也看不到,它是空的。

这是Dockerfile:

 FROM ubuntu:14.04 WORKDIR /var/www/html COPY src/package.json /var/www/html/package.json # install curl, apache, php RUN DEBIAN_FRONTEND=noninteractive \ apt-get -y update && \ apt-get -y install software-properties-common python-software-properties && \ add-apt-repository ppa:ondrej/php && \ apt-get -y update && \ apt-get install -y --force-yes \ curl \ apache2 \ php5.6 php5.6-mcrypt php5.6-mbstring php5.6-curl php5.6-cli php5.6-mysql php5.6-gd php5.6-intl php5.6-xsl # install PHPUnit RUN curl -L https://phar.phpunit.de/phpunit.phar -o phpunit.phar && \ chmod +x phpunit.phar && \ mv phpunit.phar /usr/local/bin/phpunit # install node js 6 RUN NVM_DIR="/root/.nvm" && \ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash && \ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && \ nvm install 6 && \ npm install -g webpack && \ npm install COPY src/ /var/www/html EXPOSE 80 CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] 

这里是我的docker-compose.yml文件:

 version: "2" services: db: image: mysql:5.7 volumes: - "./.data/db:/var/lib/mysql" restart: always environment: MYSQL_ROOT_PASSWORD: abc MYSQL_DATABASE: abc MYSQL_USER: abc MYSQL_PASSWORD: abc wordpress: build: . restart: always depends_on: - db links: - db ports: - "8000:80" volumes: - ./src:/var/www/html - /var/www/html/node_modules 

你没有安装node_modules卷,它只是一个直接的数据卷。 这意味着数据存储在您的主机上,但它将被埋在Docker引擎的程序存储区中。

在撰写文件中:

 volumes: - ./src:/var/www/html - /var/www/html/node_modules 

第一个卷被挂载,所以容器在主机上使用./src 。 第二卷没有挂载,所以它将在主机上的/var/lib/docker

这与docker -v相同 – 这与您的Compose文件相同,而inspect显示卷在主机上的安装位置:

 > mkdir ~/host > docker run -d -v ~/host:/vol-mounted -v /vol-not-mounted busybox 89783d441a74a3194ce9b0d57fa632408af0c5981474ec500fb109a766d05370 > docker inspect --format '{{json .Mounts}}' 89 [{ "Source": "/home/scrapbook/host", "Destination": "/vol-mounted", "Mode": "", "RW": true, "Propagation": "rprivate" }, { "Name": "55e2f1dd9e490f1e3ce53a859075a20462aa540cd72fac7b4fbe6cd26e337644", "Source": "/var/lib/docker/volumes/55e2f1dd9e490f1e3ce53a859075a20462aa540cd72fac7b4fbe6cd26e337644/_data", "Destination": "/vol-not-mounted", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }]