我有一个如下所示的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
答案 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将有所不同。
您可以强制docker
和docker-compose
来重建图像,从而避免使用以下缓存:
docker build --no-cache ...
docker-compose build --no-cache ...