docker运行与docker – 组成:相同的图像,不同的结果

TL; DR使用相同的图像,我在运行docker run和docker-up时得到了不同的结果。

我正在使用官方的PHPdocker图像 ,我想安装一组扩展。 这是我的Dockerfile

 FROM php:7.1.2-fpm # Install software and dependencies (for extensions) RUN apt-get update \ && apt-get install -qy \ libcurl4-gnutls-dev \ libpng-dev \ libicu-dev \ mcrypt \ libmcrypt-dev \ libxml2-dev \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng12-dev \ git \ nodejs # Install required PHP extensions RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-enable gd # Install and setup composer RUN curl -sS https://getcomposer.org/installer | php \ && mv composer.phar /usr/local/bin/composer # Cleanup tasks RUN apt-get clean 

正如你所看到的,我正在尝试安装gd库。 这实际上是从他们的例子。 在运行docker build我看到它运行configuration和安装步骤(步骤3/5):

 Step 1/5 : FROM php:7.1.2-fpm ---> 7191c638ed10 Step 2/5 : RUN apt-get update && apt-get install -qy libcurl4-gnutls-dev libpng-dev libicu-dev mcrypt libmcrypt-dev libxml2-dev libfreetype6-dev libjpeg62-turbo-dev libpng12-dev git nodejs ---> Using cache ---> 1f53f9211603 Step 3/5 : RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install -j$(nproc) gd && docker-php-ext-enable gd ---> Using cache ---> 4598a07d9fca Step 4/5 : RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer ---> Running in 89c18c9ddf40 All settings correct for using Composer Downloading... Composer (version 1.4.0) successfully installed to: /var/www/html/composer.phar Use it: php composer.phar ---> 059a1da3bb1a Removing intermediate container 89c18c9ddf40 Step 5/5 : RUN apt-get clean ---> Running in 66c9cb68f684 ---> f9543fa8b6e3 Removing intermediate container 66c9cb68f684 Successfully built f9543fa8b6e3 

当我现在做一个普通的docker run和ssh进入机器, gd扩展是可用的:

 $ php -m [PHP Modules] Core ctype curl date dom fileinfo filter ftp gd hash iconv json libxml mbstring mysqlnd openssl pcre PDO pdo_sqlite Phar posix readline Reflection session SimpleXML SPL sqlite3 standard tokenizer xml xmlreader xmlwriter zlib [Zend Modules] 

现在,这里是有趣的部分:当我build立( docker build )的形象,然后运行与docker-compose up的容器,扩展没有安装。

我把它缩小到docker-compose up问题,因为我做了很多不同的事情:

  • docker-compose build {servicename} + docker run {image-ID} – > extension availabe
  • 删除所有正在运行的容器和图像,删除所有docker构成图像( docker-compose down
    • 尝试了远程registry,使用dockerfile ,甚至build立图像,然后在docker-compose.ymlinput本地图像 – >相同的结果

UPDATE

docker-compose.yml

 version: '2' services: php: # this is the variant with the registry image: registry.example.com/devops/php:base-php-fpm volumes: - './src:/code' - './config/php:/usr/local/etc/php' links: - mysql depends_on: - mysql nginx: image: nginx:1.10 ports: - "80:80" volumes: - './src:/code' - './config/nginx:/etc/nginx' depends_on: - php links: - php mysql: image: mysql ports: - "3306:3306" 

原来,这是configuration文件到php的configuration文件夹的卷装入 – 只能在我的撰写文件中find。 它会覆盖PHP的自动生成的configuration。

其中一件事情让你整天忙于工作而没有提供最小的function

感谢您的帮助,伙计!