【问题标题】:Why node_modules is empty after docker build?为什么docker build后node_modules为空?
【发布时间】:2023-03-22 09:18:01
【问题描述】:

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

docker-compose up 完成后,我可以执行到 docker 容器并查看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

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    您没有安装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": ""
    }]
    

    【讨论】:

    • 我已经成功地使用了这个技巧有一段时间了,但是它突然停止工作了。现在,我在本地系统上不断得到一个空文件夹——显然——它又丢弃了容器内的内容。所以我需要重新启动,再次运行 npm install,直到它重置。
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2019-06-13
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多