当前位置:  开发笔记 > 运维 > 正文

是否有任何解决方案在从主机挂载的容器中执行二进制文件?

如何解决《是否有任何解决方案在从主机挂载的容器中执行二进制文件?》经验,为你挑选了1个好方法。

就我而言,我在基于Unix的主机上安装了ssmtp软件包.由于某种原因,在我的情况下最好的方法是在我的主机上使用ssmtp二进制文件(在/ usr/sbin下)在我的APP容器中发送邮件(html文件).

我尝试将主机目录/ usr/bin挂载到容器中:

docker run -v /usr/sbin:/host_sbin --name=myapp -ti -p 889:80 -p 890:5432 myimage

并尝试执行ssmtp,这里有一些尴尬的尝试及其结果:

在我的APP容器和/ host_sbin下

 ssmtp   --->  bash: ssmtp: command not found
./ssmtp  --->  bash: ./ssmtp: No such file or directory

所以看来事情并不像我想的那么简单.任何人都可以做这样的事情与我分享解决方案吗?如果有人能解释我为什么不起作用,我会很感激.



1> helmbert..:

只是将二进制文件安装到容器中不起作用,因为ssmtp二进制文件可能不是静态链接的.相反,它会动态链接到主机系统中存在但不在容器中的一组共享库.您可以使用ldd命令验证这一点,whilch将打印ssmtp二进制文件链接的所有库:

> ldd /usr/sbin/ssmtp

如果您想使用主机ssmtp二进制文件,则还必须将所有必需的共享库安装到容器中(并调整库路径等等;我建议不要这样做).


这是我的建议:重要的一点可能不是ssmtp二进制文件,而是SSMTP的配置文件(取决于你的发行版,但通常可以找到/etc/ssmtp).我建议......

    ssmtp使用映像的本机包管理器在容器内安装.不要将二进制文件从主机安装到容器中.

    将主机SSMTP配置文件挂载到容器中(使用-v /etc/ssmtp:/etc/ssmtp容器创建时的标志)


指向`ldd`命令的有用指针,有助于理解从容器到docker挂载二进制文件时会发生什么.
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有