我正在尝试了解如何创建自定义图像。
我正在使用node.js中的应用程序,并使用catdoc从文本文件中提取文本。
我确实通过dockerhub拉出办公室node.js图片:
git pull node
通过命令运行图像:
docker run -p 8080:3000 -v $(PWD):/my-app -w "/my-app" node npm start
我的应用程序打开了一个调用catdoc的child_process,但是它没有用,显然是因为它是一个node.js图像,所以我试过了:
docker exec <node_container_id> apt-get install catdoc
然后返回:
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package catdoc
我试图理解......这个图像没有ubuntu,所以我想“我会下载ubuntu并将cat.oc与node.js放在那里”......但是,嗯......不起作用:
docker exec <ubuntu_container_id> apt-get node
返回:
rpc error: code = 2 desc = oci runtime error: exec failed: exec: "apt-get": executable file not found in $PATH
我做错了什么?我该怎么办?我已经阅读了几个教程,但我没有得到它......
提前致谢。
答案 0 :(得分:0)
根据Dockerfile,Docker Hub上的官方节点映像基于Jessie(Debian)。 Docker镜像通常尽可能紧凑,这意味着在创建图像之前会刷新apt
缓存之类的内容。
您的apt-get install catdoc
失败,因为apt包列表为空。如果您之前运行apt-get update
,它应该可以运行:
$ docker run --rm -ti node bash
root@5ef87ec1e333:/# apt-get update
Get:1 http://security.debian.org jessie/updates InRelease [63.1 kB]
Ign http://httpredir.debian.org jessie InRelease
Get:2 http://security.debian.org jessie/updates/main amd64 Packages [374 kB]
Get:3 http://httpredir.debian.org jessie-updates InRelease [142 kB]
Get:4 http://httpredir.debian.org jessie Release.gpg [2373 B]
Get:5 http://httpredir.debian.org jessie Release [148 kB]
Get:6 http://httpredir.debian.org jessie-updates/main amd64 Packages [17.6 kB]
Get:7 http://httpredir.debian.org jessie/main amd64 Packages [9032 kB]
Fetched 9780 kB in 5s (1762 kB/s)
Reading package lists... Done
root@5ef87ec1e333:/# apt-get install catdoc
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
tk wish
The following NEW packages will be installed:
catdoc
0 upgraded, 1 newly installed, 0 to remove and 4 not upgraded.
Need to get 650 kB of archives.
After this operation, 2504 kB of additional disk space will be used.
Get:1 http://httpredir.debian.org/debian/ jessie/main catdoc amd64 0.94.4-1.1 [650 kB]
Fetched 650 kB in 0s (679 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package catdoc.
(Reading database ... 21090 files and directories currently installed.)
Preparing to unpack .../catdoc_0.94.4-1.1_amd64.deb ...
Unpacking catdoc (0.94.4-1.1) ...
Processing triggers for mime-support (3.58) ...
Setting up catdoc (0.94.4-1.1) ...
root@5ef87ec1e333:/# catdoc
Usage:
catdoc [-vu8btawxlV] [-m number] [-s charset] [-d charset] [ -f format] files
您可能希望编写自己的Dockerfile来创建包含Node,catdoc
以及您可能需要的任何工具的图像,并将容器基于该图像而不是官方图像。例如,创建一个包含Dockerfile的文件(有关rm
命令的详细信息,请参阅documentation):
FROM node
RUN apt-get update && \
apt-get install catdoc && \
rm -rf /var/lib/apt/lists/*
然后使用docker build -t="test:test" .
构建您的图像,并根据它创建一个容器:
$ docker run --rm -ti test:test bash
root@eb7f087a2cbd:/# catdoc
Usage:
catdoc [-vu8btawxlV] [-m number] [-s charset] [-d charset] [ -f format] files
答案 1 :(得分:0)
我猜你真正的问题是......
问:&#34;我可以在NodeJS图片上安装catdoc
吗?如果是的话,为什么我这样做时会看到错误?&#34;
是的,您可以从Dockerhub自定义官方NodeJS映像以包含catdoc
可执行文件。事实上,你非常接近。您之所以看到这些错误只是因为您错过了apt-get update
步骤。
但是,您可能希望在图像级别上执行此操作而不是将其安装在容器上?这样,无论何时旋转nodeJS容器,都不必重新安装catdoc
。
为此,您可以通过添加以下2行来修改下载的NodeJS Dockerfile。
# Installs catdoc executable onto the NodeJS ubuntu image
RUN apt-get update
RUN apt-get install catdoc
然后像往常一样构建图像。
示例:docker build -t nodewithcatdoc:test .
。
通过执行docker run
命令启动容器形成构建的映像,您应该准备好定制的NodeJS + CatDoc容器。