docker - 从 dockerfile 退出构建,而从图像保持运行
问题描述
我一直在使用这个Docker-Compose 存储库来使用 phpunit 和 wp-cli 进行 Wordpress 插件/主题开发。
现在我需要在 Wordpress 容器中有肥皂,所以我试图修改它以使用我自己的 Dockerfile。
当我从文件image
中的引用构建时docker-compose
,Wordpress 容器保持不变:
Name Command State Ports
----------------------------------------------------------------------------
mz-docker-dev_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp
mz-docker-dev_wordpress_1 docker-entrypoint.sh apach ... Up 80/tcp
但是当我使用 my 时Dockerfile
,它会退出:
Name Command State Ports
----------------------------------------------------------------------------
mz-docker-dev_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp
mz-docker-dev_wordpress_1 docker-php-entrypoint php -a Exit 0
这是docker-compose.yml
和 my的最小版本Dockerfile
。
version: "3"
services:
wordpress:
build: .
environment:
VIRTUAL_HOST: "${DOCKER_DEV_DOMAIN:-project.test}"
WORDPRESS_DB_HOST: "mysql"
WORDPRESS_DB_NAME: "wordpress"
WORDPRESS_DB_PASSWORD: ""
WORDPRESS_DB_USER: "root"
depends_on:
- "mysql"
networks:
- "front"
- "back"
volumes:
- "wp:/var/www/html:rw"
- "./mz-plugin:/var/www/html/wp-content/plugins/mz-plugin:ro"
mysql:
image: "mariadb:10.2"
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_DATABASE: "wordpress"
MYSQL_ROOT_PASSWORD: ""
networks:
- "back"
volumes:
- "./data:/var/lib/mysql"
networks:
front: {}
back: {}
volumes:
wp: {}
Dockerfile:
FROM "wordpress:${WP_VERSION:-latest}"
FROM php:7.3
RUN apt-get update -y \
&& apt-get install -y \
libxml2-dev \
vim \
&& apt-get clean -y \
&& docker-php-ext-install soap \
&& docker-php-ext-enable soap
我以分离模式运行:docker-compose up -d
.
当我从 Dockerfile 构建时,我错过了一步吗?是否缺少配置?
谢谢。
解决方案
您可能需要详细了解multi-stage build。
对于多阶段构建,您可以在 Dockerfile 中使用多个 FROM 语句。每个 FROM 指令都可以使用不同的基础,并且它们中的每一个都开始构建的新阶段。您可以选择性地将工件从一个阶段复制到另一个阶段,从而在最终图像中留下您不想要的一切。为了展示它是如何工作的,让我们调整上一节中的 Dockerfile 以使用多阶段构建。
上面的意思是,除非你明确地将前一阶段的东西复制到下一阶段,否则上一阶段的项目将不会在下一阶段看到。对您而言,当您定义 时FROM php:7.3
,这意味着您的最终图像将基于php:7.3
,与 无关wordpress
。
接下来你得到:
mz-docker-dev_wordpress_1 docker-php-entrypoint php -a 退出 0
这是因为php:7.3
的入口点是"docker-php-entrypoint"
,如果没有前台进程,容器将在运行入口点后直接退出。
所以,对你来说,只需删除FROM php:7.3
,基于wordpress
图像来做你的定制作品就是解决方案。
推荐阅读
- wolfram-mathematica - 如何在 Mathematica 中解决这个 NDSolve 问题
- python - 使用 geopandas 计算距离时 geoseries.to_crs() 失败
- java - excel中的数据读取并删除空白行并从行中获取数据添加到数组列表中的列表
- database - 如何在 Codeigniter 3 模型中获取类别、项目和子项目?
- batch-file - 如何一次将多个值传递到批处理文件
- python - 使用 xlrd 读取 excel 时出现数字格式问题
- django - 如何从 JSON 中的模板重写数据?
- angular - ui-router 中是否有等效于 transition.from() 的 @angular/router?
- c# - 如何在不访问应用程序目录的情况下将程序集从字节数组加载到非默认 AppDomain 中?
- batch-file - 替换可能因字符串上的特定名称而异的文件名