1

我想sendmail_path在 WordPress 的容器中设置一个并使用另一个容器提供的 sendmail。就我而言,它是MailHog。

所以这是我的 docker-compose:

version: '2'
services:
    wordpress:
        image: wordpress
        links:
            - db:mysql
            - mailhog
        ports:
            - 80:80
        domainname: foo.com
        hostname: foo
        volumes:
            - ./public:/var/www/html
        environment:
            WORDPRESS_DB_PASSWORD: example
        depends_on:
           - mailhog

    mailhog:
        image: mailhog/mailhog
        ports:
            - 1025:1025
            - 8025:8025

    db:
        image: mariadb
        environment:
            MYSQL_ROOT_PASSWORD: example

我尝试执行command: "echo 'sendmail_path = \"/usr/local/bin/mailhog sendmail\"' > /usr/local/etc/php/conf.d/mail.ini"WordPress 容器,但它实际上打印了它......

这两个必须共享卷吗?

PS。我知道我可以将它用作 APP 中的 SMTP 服务器,但我想以更自动化的方式处理它。

4

1 回答 1

6

您没有在 WordPress 容器中安装 MailHog,因此该路径/usr/local/bin/mailhog不存在。

您要做的是通过 sendmail 发送电子邮件,而这些电子邮件必须被 MailHog 捕获。为此,您必须扩展 WordPress Dockerfile:

FROM wordpress
RUN curl --location --output /usr/local/bin/mhsendmail https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 && \
    chmod +x /usr/local/bin/mhsendmail

RUN echo 'sendmail_path="/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025 --from=no-reply@docker.dev"' > /usr/local/etc/php/conf.d/mailhog.ini

注意--smtp-addr参数必须是格式<mailhog_hostname>:<mailhog_port>

更改您docker-compose.yml以构建您的 Dockerfile。

version: '2'
services:
    wordpress:
        build:
            context: ./
            dockerfile: ./Dockerfile
        links:
            - db:mysql
            - mailhog
        ports:
            - 80:80
        domainname: foo.com
        hostname: foo
        volumes:
            - ./public:/var/www/html
        environment:
            WORDPRESS_DB_PASSWORD: example
        depends_on:
           - mailhog
    
    mailhog:
        image: mailhog/mailhog
        ports:
            - 1025:1025
            - 8025:8025
    
    db:
        image: mariadb
        environment:
            MYSQL_ROOT_PASSWORD: example

在此示例中,您编写的 Dockerfile 必须命名为“Dockerfile”,并且必须位于当前目录(您运行的位置docker-compose)中。您可以相应地更改路径。1025:1025如果您不需要从主机连接到端口条目,则可以删除它。

现在该功能mail()应该按预期工作。

于 2017-04-12T19:17:27.407 回答