Configurare sendmail all’interno di un mobile contenitore

Ho un mobile contenitore l’esecuzione di php e apache. L’host è in un AWS istanza che ha la finestra mobile istanza in esecuzione. Non riesco a inviare una e-mail da mobile terminal. C’è un modo per inviare una e-mail da mobile istanza con sendmail che utilizza il mobile host configurazione?

Il seguente comando invia una email da host, ma non di inviare una e-mail da mobile istanza. Nessun errore è dato.

echo "Subject: Testing Email" | cat - text | /usr/lib/sendmail -F [email protected] -t [email protected]

 

11 Replies
  1. 20

    Quello che mi viene da fare è configurare l’host MTA per l’ascolto su docker0 e installare ssmtp nel contenitore per il ponte di sendmail nel contenitore con l’host MTA. Il motivo per eseguire un MTA sull’host del sistema (critico) errori può essere inviata al admin postale. Il motivo di non esecuzione MTA nel contenitore che si trata di un processo come il sistema host, è già in esecuzione un MTA.

    Sull’host, ho usato postfix. Tutto quello che dobbiamo fare è configurare postfix per l’ascolto su docker0 e accettare la posta in uscita da scaricatore di porto container. Modificare il file /etc/postfix/main.cf e aggiungere il docker0 indirizzo IP di inet_interfaces in modo che accetti connessioni da Mobile contenitori. Inoltre, aggiungere gli indirizzi di rete Mobile contenitori per mynetworks in modo che la finestra Mobile contenitori sono legali per inviare e-mail tramite il server postfix su un host. (di riferimento, e per ulteriori dettagli)

    Di usare sendmail in contenitori, installare ssmtp e impostare FromLineOverride essere consentito e e mailhub l’indirizzo IP dell’host in /etc/ssmtp/ssmtp.conf. È possibile impostare mailhub essere un simbolo come smtp-server e quindi eseguire il contenitore con --add-host opzione, come mostrato in questo Dockerfile (eseguito con --add-host smtp-server:your-docker0-address). Questo sarebbe configurare un utile sendmail in contenitori che vogliono usare l’host MTA per inviare e-mail.

    • Questo funziona e ottiene un utile di sendmail riga di comando dell’eseguibile. Ma che cosa è esattamente il problema con il “vero” sendmail eseguibile. A meno che io sono sempre qualcosa di sbagliato, dovrebbe essere possibile farlo funzionare senza configurare il proprio server smtp – dato ricerche dns mx lavoro e destinatario Mta sono accessibili.
    • In aggiunta a questo ho dovuto accettare connessioni in entrata sulla porta 25 sul host da scaricatore di porto container. Con UFW: sudo ufw allow from 172.17.0.0/16 to any port 25
  2. 5

    Nessuna nel Dockerfile è sendmail (o di qualsiasi altro agente di posta elettronica) installato. L’host, ma a quanto pare non hanno sendmail disponibili. Il “migliore” o più Mobile come soluzione per la selezione di un altro contenitore che viene eseguito un MTA (come postfix o exim), e configurare l’applicazione per l’uso che.

    • Sì questo può essere fatto mediante la definizione di ‘Link ” nella finestra mobile comporre file. Ma ho già avuto un lavoro piacevole server Postfix in esecuzione sull’host, come posso collegare da un Mobile contenitore per i padroni di casa server Postfix (che gestisce anche il mobile contenitore).
  3. 5

    precedenti risposte,

    creare config/sendmail_config.sh con:

    #!/bin/sh
    # set host in hosts
    line=$(head -n 1 /etc/hosts)
    line2=$(echo $line | awk '{print $2}')
    echo "$line $line2.localdomain" >> /etc/hosts
    
    yum install -y sendmail sendmail-cf m4 \
        && hostname >> /etc/mail/relay-domains \
        && m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
    
    #remove localhost limit
    sed -i -e "s/Port=smtp,Addr=127.0.0.1, Name=MTA/Port=smtp, Name=MTA/g" \
        /etc/mail/sendmail.mc
    sendmail -bd
    

    cambiare yum per apt-get di debian based contenitori

    quindi in Dockerfile aggiungere:

    RUN sed -i -e "s#;sendmail_path =#sendmail_path = /usr/sbin/sendmail -t -i#g"  \
        /your_path_to/php.ini
    COPY ./config/sendmail_config.sh .
    

    Voglio sendmail con il mio php util così posso attaccare ovunque senza dover link a un altro MTA contenitore o l’host per completare il compito.

    Ho eseguito sh sendmail_config.sh e quindi eseguire il mio php util.

    • Per me questo ha funzionato dopo che ho sostituito echo "$line $line2.localdomain" >> /etc/hosts con echo "$line $line2.localdomain $(hostname)" >> /etc/hosts
    • Non funziona con mobile-comporre. /ect/file hosts è sostituita dal mobile all’inizio del contenitore. Invece di utilizzare extra_hosts: – “localhost.localdomain:127.0.0.1” nella finestra mobile-comporre.yml
    • Se controllato dal supervisore, utilizzare exec sendmail -bD come comando di avvio
  4. 4

    Supponendo che non c’è un server di posta installato e configurato su un host!

    Alpino base mobile le immagini devono avere sendmail eseguibile.

    La soluzione più semplice è quello di eseguire il contenitore su un host’ di rete:

    docker run --rm --net="host" php:fpm-alpine sh -c 'echo "Subject: test" | sendmail -v [email protected]'
    

    Per eseguire il contenitore con rete predefinita ponte,
    configurare il server di posta per l’ascolto mobile interfaccia 172.17.0.1,
    e consentire per l’inoltro di e-mail da mobile subnet 172.17.0.0/16.

    Exim opzioni interessato a: /etc/exim4/update-exim4.conf.conf

    dc_local_interfaces='127.0.0.1 ; ::1 ; 172.17.0.1'
    dc_relay_nets='172.17.0.0/16'
    

    Riavviare il server di posta ed eseguire il contenitore dettagliato:)

    docker run --rm --hostname="your-domain.com" php:fpm-alpine sh -c 'echo "Subject: test" | sendmail -v [email protected] -S 172.17.0.1'
    
  5. 3

    Aggiunta di un nome di dominio pienamente qualificato per la finestra Mobile host nome in /etc/hosts fa il trucco per me:

    {YourDockerIP} {YouDockerHostName}.localdomain {YouDockerHostName}
    

    A me sembra questo:

    172.17.0.25 77f5a7ae8606.localdomain 77f5a7ae8606
    

    È inoltre possibile utilizzare questo script bash per aggiornare automaticamente questa linea:

    #!/bin/bash
    line=$(head -n 1 /etc/hosts | awk '{printf "%s %s.localdomain %s", $1, $2, $2}')
    sed -e "1 s/^.*$/${line}/g" /etc/hosts > hosts
    # with sed -i, it actually performs a rename of /etc/hosts, but docker does not
    # allow that, so we have to use a temp file and copy it to overwrite /etc/hosts
    cp hosts /etc/hosts
    rm hosts
    

    Di riferimento: http://hjk41.azurewebsites.net/2015/09/25/using-sendmail-inside-docker/

    • Come commento all’origine dell’origine implica, questo non funziona per tutto il tempo: tothenew.com/blog/… Purtroppo, non so, perché per alcuni utenti sembrano funzionare e per altri no.
    • Modo più semplice: RUN echo -e "$(hostname -i)\t$(hostname) $(hostname).localhost" >> /etc/hosts
    • Io sono uno degli sfortunati in cui questo non funziona, l’esecuzione di un host di Windows. Posso usare il php mail function per ottenere una risposta di 1 e vedo la cache dei messaggi in /var/spool/mqueue, ma non raggiungono mai gli indirizzi vengono inviati.
    • echo -e "$(hostname -i)\t$(hostname) $(hostname).localhost" >> /etc/hosts seguita da un riavvio del servizio service sendmail restart ha funzionato per me
  6. 2

    Ho pensato a un modo solo, anche se non è la soluzione più elegante. Ho configurato sendmail dentro la mia finestra mobile per inoltrare la richiesta tramite ip dell’host. Aggiungere la seguente riga al file “/etc/mail/access

    Connect:<host_ip_here>          RELAY
    

    Inoltre, l’host e mobile, commento la riga seguente nel file “/etc/mail/sendmail.mc” con prefisso con “dnl #” e il suffisso, con “dnl”.

    DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
    

    Ho superato l’ip dell’host come una variabile di ambiente per il mobile contenitore, in modo che sia configurabile. Ora la finestra mobile è sendmail sarà relè è di sendmail smtp richiesta tramite il computer host.

  7. 1

    EDIT: si Prega di vedere xuhdev risposta per maggiori informazioni e su come configurare la mail di inoltro. La mia risposta può essere utilizzato per la configurazione di sendmail, invece di postfix su host.

    EDIT #2: Aggiungere la regola del firewall per consentire il traffico smtp da scaricatore di porto

    Ho fatta una simile configurazione come la tarun mittal come segue:

    • nella finestra mobile app che ho impostato per utilizzare il server smtp con l’ip del docker0 interfaccia (172.17.42.1)
    • nella finestra mobile host, modificato /etc/mail/sendmail.mc mettesse in ascolto sulla docker0 interfaccia (in contrasto a tutte le interfacce tarun risposta – il grassetto è aggiunto line)

      DAEMON_OPTIONS (Famiglia=inet, Nome=MTA-v4, Port=smtp, Addr=127.0.0.1′)dnl

      DAEMON_OPTIONS (Famiglia=inet, Nome=MTA-v4, Port=smtp, Addr=172.17.42.1′)dnl

    • Consentire l’accesso da mobile contenitori docker interfaccia del firewall
      iptables-I INPUT-s 172.17.0.0/24-d 172.17.42.1 -dport 25 -j ACCEPT

    • in /etc/mail/access ho aggiunto alla fine di permettere a tutti mobile istanze di inviare e-mail e makemap hash /etc/mail/access < /etc/mail/access per la compilazione del database

      ///MODIFICATO – USO DI SEGUITO COME FINESTRA MOBILE ANDRÀ A 172.17.1.X dopo molti ricostruisce

      ///VECCHIA – Connect:172.17.0 RELÈ

      Connect:172.17 RELÈ

    • Infine riavviare sendmail – servizio sendmail riavviare

    • Il problema non sarebbe stato risolto se la finestra Mobile app è hardcoded di utilizzare il sendmail programma.
    • Sì, la tua soluzione è migliore, in quanto permette che scenario troppo.
  8. 1

    Ho lottato con questo problema. Dal mio codice python in esecuzione all’interno di un mobile contenitore, ho dovuto temporaneamente inviare e-mail tramite postfix (server smtp) in esecuzione sul computer host. Dopo aver provato tutta una serie di cose, in quello che si rivelò essere una soluzione semplice è stata pannello di comando esegui con –net=”host”. Attenzione: Questo non può essere una buona soluzione in tutti i casi, come ad un contenitore di condividere lo stack di rete con la finestra mobile host e dal contenitore punto di vista, localhost(o 127.0.0.1) farà riferimento per la finestra mobile host.
    Ecco quello che ho fatto su un host ubuntu:
    mobile run-si –net=”host” ubuntu /bin/bash
    Questo mi ha dato il contenitore a guscio.
    Ho poi installato python in questo contenitore:
    apt-get update && apt-get-y install supervisore python-pip

    Poi ho lanciato l’interprete python e licenziato le seguenti righe di codice:

    import smtplib
    from email.mime.text import MIMEText
    
    fromaddr = 'testemail.yourdomain.com'
    toaddr = 'youremail.yourdomain.com'
    
    msg = MIMEText('Sample email from python/docker container')
    msg['from'] = fromaddr
    msg['subject'] = 'Subject of python email'
    msg['to'] = toaddr
    
    server = smtplib.SMTP('localhost')
    server.set_debuglevel(1)
    server.sendmail(fromaddr, toaddr, msg.as_string())
    server.quit
    

    Ho trovato anche [questo][1] una lettura utile.

    • Sembra che si è dimenticato di includere il tuo link alla fine di questo.
  9. -1

    Secondo Sendmail manuale possiamo utilizzare sendmail -bd comando per l’esecuzione di un servizio. Ma esiste con zero di stato. Quindi…

    # In your Dockerfile
    RUN yum install -y sendmail
    # Run mail listener
    RUN sendmail -bd
    
    CMD sleep infinity
    # or run your command
    

    Inoltre è possibile utilizzare supervisord.
    Io uso questa configurazione:

    [program:sendmail]
    command=/usr/sbin/sendmail -bd
    autostart=true
    autorestart=false
    numprocs=1
    startretries=0
    

    E prova:

    $ echo test123 | sendmail [email protected]
    

    Non dimenticate di controllare la cartella Spam.

    • Se non ti piace la risposta – si prega di aggiungere un commento. Thx.)
  10. -1

    Per me, semplicemente aggiungendo l’opzione –rete host=bandiera sul mio pannello di comando esegui lavorato. È necessario utilizzare l’host per inviare l’e-mail.

Lascia un commento