我正在尝试创建一个多阶段构建,其中第一阶段为主题安装纱线,第二阶段为Drupal设置PHP环境。
当我查看输出时,看起来好像正在运行yarn install,但是底部附近的String[] columnNames = finalBcDF.columns();
Dataset<Row> x = null;
for(String columnName : columnNames) {
x = finalBcDF.withColumnRenamed(columnName, columnName.toUpperCase());
}
命令不会将其复制到PHP映像中。如果我认为正确,那么应该在本地计算机上创建node_modules目录吗?
docker-compose.yml:
COPY
Dockerfile:
version: '3.7'
services:
web:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./:/var/www/html:cached
env_file:
- ./local-development.env
ports:
- "8888:80"
db:
image: mysql:5.7
env_file:
- ./local-development.env
ports:
- "3306:3306"
答案 0 :(得分:1)
当您的Dockerfile结尾时:
WORKDIR /var/www/html
COPY --from=0 /app ./web/themes/material_admin_mine
实际上,这应该将数据从第一个构建阶段复制到最终映像。但是,当您使用
启动容器时volumes:
- ./:/var/www/html:cached
/var/www/html
目录树中的所有内容(包括最后的COPY步骤)都被隐藏,并替换为主机当前目录中的内容。如果您将其视为副本,则它是容器中的单向副本。以后的更改将被复制回主机,但是在启动时,没有什么可以将映像中的内容与您先前在目录中的内容进行同步。
Dockerfile本质上不会影响主机文件系统的内容。就您而言,听起来主机内容是您的应用程序的第二要件。鉴于进入第一阶段的过程,我只需在主机上运行yarn install
步骤并完成它(您可能已经可以使用Node和Yarn了)。否则,您将需要一个更具选择性的volumes:
部分,该部分会仔细尝试避免覆盖该目录。您也许可以挂载./web/src:/var/www/html/web/src
之类的内容,仅包括应用程序代码,而避免隐藏.../web/themes
树。