6

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

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

4

1 回答 1

11

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

> ldd /usr/sbin/ssmtp

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


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

  1. ssmtp使用映像的本机包管理器在容器内安装。不要将二进制文件从主机安装到容器中。
  2. 将主机 SSMTP 配置文件挂载到容器中(使用-v /etc/ssmtp:/etc/ssmtp容器创建标志)
于 2015-12-28T15:21:53.683 回答