package.json文件不会在docker容器中保留

时间:2016-09-29 03:43:50

标签: docker docker-compose dockerfile

我正在尝试构建一个docker环境。我制作了一个构建我的图像的Dockerfile。除了我的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"]

3 个答案:

答案 0 :(得分:0)

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

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

还要确保

中包含package.json

答案 1 :(得分:0)

    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的开头,它就可以工作。但还有一些其他问题。

后立即停止构建过程
 chmod +x /usr/local/bin/composer

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

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

答案 2 :(得分:0)

似乎我们需要在源目录中包含package.json文件。分别复制package.json并运行npm install模式用于使用docker的缓存系统。