如何在docker中使用gulp运行node.js并找到正确的bashsrc
我是Docker的新手,我确实有一些问题 我的目标是:如何在docker中使用gulp运行node.js并找到正确的bashsrc,bash,docker,gulp,Bash,Docker,Gulp,我是Docker的新手,我确实有一些问题 我的目标是: 使用Dockerfile创建docker容器并留在容器内/不要从容器中退出 运行本地Docker容器 使用package.json安装“gulp” 在Docker上安装“gulp global” 将所有文件复制到我的Docker容器 执行“gulp--version”和默认的“gulptask”,并停留在终端内 以下是我的设置: Dockerfile FROM node:10 WORKDIR /usr/src/app COPY pack
- 使用Dockerfile创建docker容器并留在容器内/不要从容器中退出
- 运行本地Docker容器
- 使用package.json安装“gulp”
- 在Docker上安装“gulp global”
- 将所有文件复制到我的Docker容器
- 执行“gulp--version”和默认的“gulptask”,并停留在终端内
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --global gulp-cli
RUN npm install
COPY . .
EXPOSE 3000
CMD ["gulp --version" , "gulp"] or? [gulp --version , gulp]
package.json
{
"name": "docker-test",
"version": "1.0.0",
"description": "Testing Docker",
"main": "index.js",
"scripts": {
"test": "test"
},
"author": "",
"license": "",
"devDependencies": {
"gulp": "^4.0.0"
}
}
gulpfile.js
function defaultTask(cb) {
console.log("Default task for gulp 4.0 for docker")
cb();
}
exports.default = defaultTask
docker-compose.yml(我不认为我们需要这个来回答我的问题,但我还是会发布它,因为我不确定这是否会产生一些问题)
我现在的问题是:
首先,我真的对docker的工作流程感到困惑。
如果我运行以下命令,我是否正确理解它:
docker build . --tag gulp-docker-test
我将使用dockerfile的内容在我的计算机上创建一个新的docker容器?
如果我需要更新其中的任何内容,我必须再次运行它,以便更新容器
如果我使用:
docker start gulp-docker-test
它会启动容器吗?如果我改变了里面的东西怎么办?它会在容器重新启动时返回吗?还是因为它只是一个暂时的图像而消失了
除此之外,如果我尝试运行它,会出现以下错误:
ERROR: for gulp-docker-test Cannot start service html: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"gulp --version\": executable file not found in $PATH": unknown
ERROR: for html Cannot start service html: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"gulp --version\": executable file not found in $PATH": unknown
我确实尝试过这些方法:使用exec执行,删除Dockerfile的CMD中的引号,但我认为我缺少一些基本知识。我不明白如何在shell中启动这个容器,以便docker知道$path
提前谢谢你的帮助
编辑:
我确实发现了如何使用shell运行docker
docker run -it --entrypoint bash gulp-docker-test3
如果我可以将默认bash添加到dockerfile中,它看起来应该可以工作。首先
我将在我的计算机上创建一个包含内容的新docker容器
dockerfile的名字?如果我需要更新其中的任何内容,我必须
再次运行它以便更新容器
docker build
创建一个映像(如ISO)。要创建容器,必须启动/运行此映像。容器是一个正在运行的映像,它可能不同于原始映像,因为在运行期间,您可以修改其中的文件系统。停止并移除容器时,所有更改都将丢失。Docker的做法不是将数据存储在图像中——如果图像生成有价值的内容,则应将其存储在外部(考虑卷)
第二
这是不正确的。JSON表示法要求您将每个参数放在单独的数组元素中。这是正确的:
CMD ["guld", "--version"]
结论
您可以使用创建图像
docker build -t my-image .
您可以使用以下命令启动它(创建容器)
如果您需要控制正在运行的容器,可以使用友好的名称我的图像实例
,或者,如果您没有提供,可以先使用容器的ID
我将在我的计算机上创建一个包含内容的新docker容器
dockerfile的名字?如果我需要更新其中的任何内容,我必须
再次运行它以便更新容器
docker build
创建一个映像(如ISO)。要创建容器,必须启动/运行此映像。容器是一个正在运行的映像,它可能不同于原始映像,因为在运行期间,您可以修改其中的文件系统。停止并移除容器时,所有更改都将丢失。Docker的做法不是将数据存储在图像中——如果图像生成有价值的内容,则应将其存储在外部(考虑卷)
第二
这是不正确的。JSON表示法要求您将每个参数放在单独的数组元素中。这是正确的:
CMD ["guld", "--version"]
结论
您可以使用创建图像
docker build -t my-image .
您可以使用以下命令启动它(创建容器)
如果您需要控制正在运行的容器,可以使用友好的名称my image instance
,或者,如果您没有提供,可以使用容器的ID
如果我运行docker build
我将创建一个新容器
它将执行Dockerfile的内容,并创建一个新图像
您需要docker运行
(或者,很少情况下,docker创建
)图像以从中创建容器。更新docker文件或应用程序源时,需要重复docker build
步骤、docker stop&&docker rm
现有容器,以及docker run
新容器。您的docker compose.yml
片段封装了这个,但是请注意,docker compose将在适当的时候删除并重新创建一个容器
如果我使用docker启动吞咽docker测试
它将以该名称启动一个容器。这是一个独立于图像名称空间的名称空间。容器必须已经存在并停止(通常通过显式docker stop
命令)。这是一种稍微不寻常的状态
CMD[“咕噜——版本”,“咕噜”]
这将查找名为gulp--version
的二进制文件,并使用单个参数gulp
运行它。由于您可能没有一个名为/usr/local/bin/gulp--version
(文件名中包含空格和“version”)的文件,因此会出现错误
您在Dockerfile中只获得一个CMD。(或者改为一个入口点,但我倾向于认为CMD更可取,除非是在一些非常特殊的情况下。)在shell中键入的每个“单词”在语法中都变成一个单独的“单词”。比如说,你可以写
CMD ["gulp", "--version"]
或者,如果您不使用括号,Docker将把CMD文本包装在sh-c…
中,这样更接近您实际编写的内容
CMD gulp --version && gulp
实际上,您通常会在构建映像时运行构建工具(如Gulp),并使用CMD实际启动应用程序
RUN gulp
CMD ["npm", "start"]
如果我运行docker build
我将创建一个新容器
它将执行Dockerfile的内容,并创建一个新图像
您需要docker运行
(或者,很少情况下,docker创建
)图像以从中创建容器。当你起床的时候
CMD gulp --version && gulp
RUN gulp
CMD ["npm", "start"]