gpt4 book ai didi

运行前 Docker-compose 卷挂载

转载 作者:IT老高 更新时间:2023-10-28 12:37:35 29 4
gpt4 key购买 nike

我有一个来自 docker-compose.yml 的 Dockerfile。

我希望 docker-compose.yml 中的卷挂载发生在 Dockerfile 中的 RUN 之前。

Dockerfile:

FROM node

WORKDIR /usr/src/app

RUN npm install --global gulp-cli \
&& npm install

ENTRYPOINT gulp watch

docker-compose.yml

version: '2'

services:
build_tools:
build: docker/gulp
volumes_from:
- build_data:rw

build_data:
image: debian:jessie
volumes:
- .:/usr/src/app

首先执行 Dockerfile,然后从 docker-compose 挂载是完全有意义的,但是有没有办法绕过它。

我想保持 Dockerfile 的通用性,同时从 compose 中传递更具体的位。也许这不是最佳做法?

最佳答案

Erik Dannenberg's是正确的,体积分层意味着我试图做的事情毫无意义。 (如果您想阅读更多内容,Docker website 上有另一个非常好的解释)。如果我想让 Docker 执行 npm install 那么我可以这样做:

FROM node

ADD . /usr/src/app
WORKDIR /usr/src/app

RUN npm install --global gulp-cli \
&& npm install

CMD ["gulp", "watch"]

但是,这不适合作为我的情况的解决方案。目标是使用 NPM 安装项目依赖项,然后运行 ​​gulp 来构建我的项目。这意味着我需要对项目文件夹进行读写访问并且它需要在容器消失后仍然存在。


在挂载卷之后我需要做两件事,所以我想出了以下解决方案......

docker/gulp/Dockerfile:

FROM node

RUN npm install --global gulp-cli

ADD start-gulp.sh .

CMD ./start-gulp.sh

docker/gulp/start-gulp.sh:

#!/usr/bin/env bash

until cd /usr/src/app && npm install
do
echo "Retrying npm install"
done
gulp watch

docker-compose.yml:

version: '2'

services:
build_tools:
build: docker/gulp
volumes_from:
- build_data:rw

build_data:
image: debian:jessie
volumes:
- .:/usr/src/app

所以现在容器启动一个 bash 脚本,该脚本将不断循环,直到它可以进入目录运行 npm install。这仍然很脆弱,但它有效。 :)

关于运行前 Docker-compose 卷挂载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37089162/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com