将自定义二进制文件添加到Docker容器PATH
我想添加一个自定义的二进制可执行文件到一个容器。 我已经在我的机器上,并尝试添加它。 起初,我想将某个目录挂载为/tmp/foo
,并将其复制到/usr/bin/
。 不是很好,但应该做的伎俩。 为此,我在docker-compose.yml
定义了以下卷安装:
volumes: - ./var/bin/:/tmp/bin/
并在Dockerfile
以下命令:
RUN ls /tmp/bin RUN cp /tmp/bin/wkhtmltoimage /usr/local/bin/ && cp /tmp/bin/wkhtmltopdf /usr/local/bin/
正如你所看到的,我已经添加列表目录来检查是否有任何东西在那里,我得到了
ls: cannot access /tmp/bin: No such file or directory ERROR: Service 'web' failed to build: The command '/bin/sh -c ls /tmp/bin' returned a non-zero code: 2
现在有两个问题:
-
为什么这个目录在容器的命令行中不可见? 其他坐骑可用…
-
我怎样才能“正确地”实现这个目标? 所以这个二进制文件在映像生成过程中将被复制/设置一次,并且不需要每个容器运行的映射?
为什么这个目录在容器的命令行中不可见? 其他坐骑可用…
因为在构build容器时绑定安装卷尚未安装。 您正在使用docker-compose.yml类似于在运行时装入卷
docker run -v $(pwd)/var/tmp:/tmp/bin myimage/myimage
但在docker-compose挂载卷之前,您正在尝试访问/ tmp / bin。
我怎样才能“正确地”实现这个目标? 所以这个二进制文件在映像生成过程中将被复制/设置一次,并且不需要每个容器运行的映射?
用一对ADD命令replace您从Dockerfile提供的两个RUN命令:
ADD ./var/bin/wkhtmltopdf /usr/local/bin ADD ./var/bin/wkhtmltoimage /usr/local/bin
这将从您的主机采取文件,并把它们直接在图像。 这是做你想做的事的正确方法。
- 如何用Docker启动现有的WordPress的应用程序图像不是默认的80端口?
- docker-compose / wordpress权限错误卷挂载
- docker中的Django shell模式
- Docker-Compose的WordPress的:wp_mail()不工作
- docker:找不到命令(mac mini)只发生在jenkins shell步骤中,但是在命令提示符下工作
- 在Docker容器中运行Google Chrome Headless
- Docker的php5-fpm服务退出(代码0)
- 我可以使用logspout在Docker群集上进行全局系统日志logging吗?
- Docker工具箱 – 本地主机不工作