覆盖另一个文件时,Dockerfile COPY命令将一个空文件放入其容器中

时间:2019-06-01 17:08:44

标签: docker dockerfile

将文件从主机复制到目标路径中已经存在文件的容器时,复制的文件为空。

我试图将相同的文件复制到具有不同名称的路径,并且效果很好。

此问题发生在我的dockerfile中的两行是:

COPY conf/policy.xml /etc/ImageMagick-6/

COPY conf/000-default.conf /etc/apache2/sites-available/

完整的dockerfile:

FROM php:7.3-apache
RUN docker-php-ext-install pdo_mysql && docker-php-ext-enable pdo_mysql
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli

RUN apt-get update && apt-get install -y \
  git libmagick++-dev \
  --no-install-recommends && \
  git clone https://github.com/mkoppanen/imagick.git && \
  cd imagick && git checkout master && phpize && ./configure && \
  make && make install && \
  docker-php-ext-enable imagick && \
  cd ../ && rm -rf imagick && \
  apt-get install -y ghostscript && rm -r /var/lib/apt/lists/*

RUN pecl install xdebug
RUN docker-php-ext-enable xdebug

COPY conf/php.ini /etc/php/7.3/fpm/conf.d/40-custom.ini
COPY conf/policy.xml /etc/ImageMagick-6/
COPY www/ /var/www/html/

COPY conf/000-default.conf /etc/apache2/sites-available/
COPY scripts/generate-ssl.sh /generate-ssl.sh

RUN chmod +x /generate-ssl.sh
RUN /bin/bash /generate-ssl.sh

EXPOSE 80 443

这是预期的行为吗?

1 个答案:

答案 0 :(得分:1)

来自Docker Documentation - Docerfile Copy

  

COPY src dest:如果src是任何类型的文件,它将与元数据一起单独复制。在这种情况下,如果以/开头,则将其视为目录,并且其内容将写入/ base()。

对于您的情况,请尝试指定dest文件:

COPY conf/policy.xml /etc/ImageMagick-6/policy.xml

COPY conf/000-default.conf /etc/apache2/sites-available/000-default.conf

否则,我看不到您的dockerfile有什么问题