package.json文件不会在docker容器中持久化

我正在试图build立一个docker环境。 我已经做了一个Dockerfile来build立我的形象。 似乎一切工作正常,除了我的package.json文件不会持久保存在容器内的问题 。 看起来好像它正在被删除的地方。 我做错了什么? 这是我的Docker文件内容:

FROM ubuntu:14.04 RUN groupadd -r webuser && useradd -r -g webuser webuser && mkdir /home/webuser/ && chown webuser:webuser /home/webuser/ # install curl, apache, php RUN sudo 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 \ git-core \ 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 \ php5.6-bz2 php5.6-zip && \ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \ php composer-setup.php && \ php -r "unlink('composer-setup.php');" && \ mv composer.phar /usr/local/bin/composer && \ chmod +x /usr/local/bin/composer # 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 && \ chmod +x /usr/local/bin/phpunit ADD package.json /var/www/html/package.json WORKDIR /var/www/html RUN chown -R webuser:webuser /var/www/html USER webuser # install node js 6 RUN NVM_DIR="/home/webuser/.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 RUN echo 'export NVM_DIR="/home/webuser/.nvm"\n\ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"'\ >> /home/webuser/.bashrc COPY src /var/www/html/ USER root EXPOSE 80 CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] 

尝试将您的ADD命令更改为以下内容:

 RUN mkdir -p /var/www/html ADD package.json /var/www/html 

还要确保package.json存在于

  FROM ubuntu:14.04 ADD package.json /var/www/html/package.json RUN groupadd -r webuser && useradd -r -g webuser webuser && mkdir /home/webuser/ && chown webuser:webuser /home/webuser/ # install curl, apache, php RUN sudo 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 \ git-core \ 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 \ php5.6-bz2 php5.6-zip && \ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \ php composer-setup.php && \ php -r "unlink('composer-setup.php');" && \ mv composer.phar /usr/local/bin/composer && \ chmod +x /usr/local/bin/composer # 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 && \ chmod +x /usr/local/bin/phpunit WORKDIR /var/www/html RUN chown -R webuser:webuser /var/www/html USER webuser # install node js 6 RUN NVM_DIR="/home/webuser/.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 RUN echo 'export NVM_DIR="/home/webuser/.nvm"\n\ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"'\ >> /home/webuser/.bashrc COPY src /var/www/html/ USER root EXPOSE 80 CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] 

我已经执行了你的Dockerfile并有同样的问题。 如果ADD位于Dockerfile的开头,它将起作用。 但还有其他一些问题。 构build过程正在停止

  chmod +x /usr/local/bin/composer 

它不会安装PHPUnit和nodeJS,设置www目录的所有者等等。

也许你应该把整个RUN链接成一个。

看来我们需要在源代码目录中包含package.json文件。 分别复制package.json并运行npm install模式用于使用docker的caching系统。