运行命令未执行的docker文件

时间:2020-01-23 19:48:36

标签: docker docker-compose

我有一个如下所示的docker-compose文件和一个适用于php的app.docker文件。当我在笔记本电脑上运行此程序时,一切正常。

在主PC上运行此命令时,app.docker文件中的RUN命令未运行。我必须CLI进入php实例并手动运行。

对为什么有任何想法吗?

docker-compose.yml

version: '2'

services:
    nginx:
      image: nginx:1.13.12
      ports:
        - "8443:443"
        - "8080:80"
      volumes:
        - ./:/var/www
        - ./docker/nginxconf:/etc/nginx/conf.d
        - ./docker/ssl-cert:/etc/nginx/certs
      working_dir: /var/www
      links:
        - php
    php:
        build:
            context: ./
            dockerfile: docker/app.docker
        volumes:
            - ./:/var/www
        depends_on:
          - db
        links:
            - db
        environment:
            - "DB_PORT=3306"
            - "DB_HOST=db"
    db:
        image: mariadb
        environment:
            - "MYSQL_ROOT_PASSWORD=secret"
            - "MYSQL_DATABASE=dockerApp"
        ports:
            - "33061:3306"

app.docker

FROM php:7-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev mariadb-client libmcrypt4 \
    && docker-php-ext-install pdo_mysql \
    && kill -USR2 1

WORKDIR /var/www

1 个答案:

答案 0 :(得分:1)

Docker缓存“层”以保存重复生成的层。

RUN是生成层的Dockerfile命令之一,因此Docker引擎将缓存该层,因此如果存在且未更改,则不会重新RUN命令。

我复制了您的Dockerfile并构建了两次。这是第二次运行:

docker build --rm --file=./Dockerfile --tag=59886068:latest .
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM php:7-fpm
 ---> fa37bd6db22a
Step 2/3 : RUN apt-get update && apt-get install -y libmcrypt-dev mariadb-client libmcrypt4     && docker-php-ext-install pdo_mysql     && kill -USR2 1
 ---> Using cache
 ---> c76aaadf8680
Step 3/3 : WORKDIR /var/www
 ---> Using cache
 ---> fc0287d8edb2
Successfully built fc0287d8edb2
Successfully tagged 59886068:latest

NB (在我的情况下)Using cache的第二个版本中,步骤#2是c76aaadf8680

您可以使用:

docker image history 59886068:latest

IMAGE               CREATED             CREATED BY
fc0287d8edb2        21 minutes ago      /bin/sh -c #(nop) WORKDIR /var/www
c76aaadf8680        21 minutes ago      /bin/sh -c apt-get update && apt-get install…
fa37bd6db22a        3 weeks ago         /bin/sh -c #(nop)  CMD ["php-fpm"]

或者:

docker image ls --all | grep c76aaadf8680

<none>    <none>    c76aaadf8680        21 minutes ago      477MB

NB 。您的图片ID将有所不同。

您可以强制dockerdocker-compose来重建图像,从而避免使用以下缓存:

docker build --no-cache ...
docker-compose build --no-cache ...