是否有任何解决scheme执行二进制在从主机挂载的容器?

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

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

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

并尝试执行ssmtp,这里有一些尴尬的尝试和他们的结果:

在我的APP容器和under / host_sbin下

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

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

简单地将二进制文件安装到你的容器中不起作用,因为ssmtp二进制可能不是静态链接的。 相反,它会dynamic链接到主机系统中存在的一组共享库,但不在您的容器中。 您可以使用ldd命令来validation这个问题,这将会打印ssmtp二进制文件链接到的所有库:

 > ldd /usr/sbin/ssmtp 

如果你想使用你的主机ssmtp二进制文件,你还必须将所有必需的共享库装入你的容器(并调整库path等,我build议不要)。


这里是我的build议:重要的一点可能不是ssmtp二进制文件, 而是SSMTP的configuration文件 (取决于你的发行版,但通常在/etc/ssmtp )。 我build议…

  1. 使用映像的本地软件包pipe理器在您的容器中安装ssmtp 。 不要将二进制从主机挂载到容器中。
  2. 将主机SSMTPconfiguration文件挂载到容器中(在容器创build时使用-v /etc/ssmtp:/etc/ssmtp标志)
Interesting Posts