Docker 将 Mail catcher 与 WordPress 连接
Docker connect Mail catcher with WordPress
我想在 WordPress 的容器中设置一个 sendmail_path
并使用另一个容器提供的 sendmail。在我的例子中是 MailHog。
所以这是我的docker-撰写:
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
我尝试在 WordPress 容器上执行 command: "echo 'sendmail_path = \"/usr/local/bin/mailhog sendmail\"' > /usr/local/etc/php/conf.d/mail.ini"
但它实际上打印了它...
这两个必须共享卷吗?
PS。我知道我可以将它用作 APP 中的 SMTP 服务器,但我想以更自动化的方式处理它。
您没有在 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()
应该可以正常工作了。
我想在 WordPress 的容器中设置一个 sendmail_path
并使用另一个容器提供的 sendmail。在我的例子中是 MailHog。
所以这是我的docker-撰写:
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
我尝试在 WordPress 容器上执行 command: "echo 'sendmail_path = \"/usr/local/bin/mailhog sendmail\"' > /usr/local/etc/php/conf.d/mail.ini"
但它实际上打印了它...
这两个必须共享卷吗?
PS。我知道我可以将它用作 APP 中的 SMTP 服务器,但我想以更自动化的方式处理它。
您没有在 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()
应该可以正常工作了。