有没有任何解决方案可以在从主机装载的容器中执行二进制文件



在我的情况下,我在基于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,以下是一些尴尬的尝试及其结果:

在我的应用程序容器中,在/hostrongbin

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

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

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

> ldd /usr/sbin/ssmtp

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


我的建议是:重要的部分可能不是ssmtp二进制文件,而是SSMTP的配置文件(取决于您的分布,但通常在/etc/ssmtp中找到)。我建议。。。

  1. 使用映像的本机包管理器在容器中安装ssmtp。不要将二进制文件从主机装载到容器中
  2. 将主机SSMTP配置文件装载到容器中(在创建容器时使用-v /etc/ssmtp:/etc/ssmtp标志)

相关内容

  • 没有找到相关文章

最新更新