2015-12-28 2 views
5

В моем случае я установил пакет ssmtp на моем хосте на базе Unix. По какой-то причине лучший способ в моей ситуации - использовать ssmtp binary (под/usr/sbin) на моем хосте для отправки почты (html-файл) в моем контейнере APP.Есть ли какое-нибудь решение для выполнения двоичного кода в контейнере, который монтируется с хоста?

Я attemp для монтирования каталога хоста/USR/бен в контейнере:

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

Найдено это один полезный [https://github.com/larsks/dockerize](https://github. com/larsks/dockerize) – dtmland

ответ

6

Простое использование двоичного кода в контейнере не работает, поскольку двоичный файл ssmtp, вероятно, не связан статически. Вместо этого он динамически связан с набором разделяемых библиотек, которые присутствуют в вашей хост-системе, но не в вашем контейнере. Вы можете проверить это с помощью команды ldd, whilch напечатает все библиотеки, что ssmtp Двоичный связаны с:

> ldd /usr/sbin/ssmtp 

Если вы хотите использовать ваш хост ssmtp двоичный код, вы также должны смонтировать все необходимые разделяемые библиотеки в ваш контейнер (и отрегулируйте путь к библиотеке и т. д., я бы рекомендовал не делать этого).


Вот мое предложение: Важно немного, вероятно, не ssmtp двоичный, но файлы конфигурации SSMTP в (в зависимости от дистрибутива, но обычно находится в /etc/ssmtp). Я бы посоветовал ...

  1. Установка ssmtp внутри вашего контейнера с использованием встроенного менеджера пакетов изображений. Не монтируйте двоичный файл из хоста в контейнер.
  2. Смонтировать файлы конфигурации хостов SSMTP в контейнер (используя -v /etc/ssmtp:/etc/ssmtp флаг на создание контейнера)
+0

Я очень ценю это, подкрепляя ваши советы. Кажется, что монтаж всех библиотек - это не очень хороший способ. На самом деле, я уже пробовал немного вашего предложения раньше, но я столкнулся с портом связи SMTP в контейнере, Кажется, что пересылка портов с -p не является правильным направлением для SMTP-работ? Извините, о моей плохой способности, Вы сделали это раньше? Спасибо еще раз! – Carr

+0

Игнорируйте мой вопрос в комментарии, я просто делаю какую-то глупость. Теперь он работает! Большое спасибо! – Carr

+3

Полезный указатель на команду 'ldd', которая была полезной для понимания того, что происходит, когда двоичный файл монтируется из контейнера в докер. –

Смежные вопросы