docker - 有什么解决方案可以在从主机挂载的容器中执行二进制文件?

标签 docker binary containers mount ssmtp

就我而言,我已经在基于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

所以看来事情并不像我想的那么简单。
有人可以做这样的事情与我分享解决方案吗?
如果有人可以向我解释为什么不起作用,我将感激不尽。

最佳答案

简单地将二进制文件安装到您的容器中是行不通的,因为ssmtp二进制文件可能不是静态链接的。而是将其动态链接到主机系统中存在的一组共享库,而不是容器中存在的一组共享库。您可以使用ldd命令进行验证,whilch将打印所有与ssmtp二进制文件链接的库:

> ldd /usr/sbin/ssmtp

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

这是我的建议:重要的一点可能不是ssmtp二进制文件,而是SSMTP的配置文件(取决于您的分布,但通常在/etc/ssmtp中找到)。我建议...
  • 使用镜像的 native 软件包管理器在容器内安装ssmtp。不要将二进制文件从主机安装到容器中。
  • 将主机SSMTP配置文件挂载到您的容器中(在容器创建时使用-v /etc/ssmtp:/etc/ssmtp标志)

  • 关于docker - 有什么解决方案可以在从主机挂载的容器中执行二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34495909/

    相关文章:

    css - 向下滚动时展开 DIV 到页面底部

    permissions - 无法在 docker 容器中使用 tc

    docker - 无法删除已停止的Docker容器

    c - 试图从文件中读回二进制数据,导致崩溃

    java - 字符串中的字符替换需要很长时间

    javascript - 二元运算在同一台机器上的不同输出

    c++ - 为什么删除不支持反向迭代器?

    docker 命令未运行

    docker - 带有 docker 代理的 Jenkinsfile 无法加载 ssh key

    docker - 如何在主机中执行Linux命令并将输出复制到docker文件构建的镜像中?