gpt4 book ai didi

bash - 使用 postfix 容器从容器发送邮件

转载 作者:行者123 更新时间:2023-12-02 20:05:43 26 4
gpt4 key购买 nike

我正在使用托管在 docker 容器上的应用程序。
此应用程序执行 bash 脚本/指令来发送邮件。
我制作了另一个将 Postfix 作为 SMTP 中继执行的容器。

我想通过使用我的 Postfix 容器作为中继的 bash 脚本从我的应用程序容器发送邮件。

我尝试使用 SSH 从我的应用程序容器连接到我的 Postfix 容器。但这似乎不起作用。

我怎样才能做到这一点,以便在我的应用程序容器中执行的脚本可以使用我的 Postfix 中继,同时不允许 docker 网络之外的任何东西,或者更好的是,只允许某些容器从这个中继发送邮件。

编辑 1: Docker-compose 文件

应用程序 docker 撰写:

version: "3.4"
volumes:
[...]

services:
application:
restart: always
build: ./application
depends_on:
- mariadb
container_name: application
volumes:
[...]
ports:
- "80:80"
- "443:443"
- "5669:5669"
deploy:
restart_policy:
window: 300s
links:
- mariadb
external_links:
- smtp-server

mariadb:
restart: always
image: mariadb
command: mysqld --sql-mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
container_name: application-mariadb
volumes:
[...]
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
deploy:
restart_policy:
window: 300s

这是我的 SMTP 服务器的 docker compose:
版本:“3.4”
services:
postfix:
restart: always
build: ./postfix
container_name: smtp-server
deploy:
restart_policy:
window: 300s

最佳答案

{快速回复,因为我在工作中“循环”......我需要花 10 分钟来清理我的薄荷糖,我希望它对你有用}

你在使用“docker-compose”吗?你能举一个你的 YML 文件的例子吗? (更多上下文)

[除非您安装了“supervisor ”,否则您无法通过 ssh 连接到容器,我完全不推荐这样做。]

据我所知,您只需要制作专用网络;你可以使用这个:

https://docs.docker.com/compose/networking/

要隐藏所有内容,我还建议使用负载均衡器/反向代理,例如 TRAEFIK (如果他们能够以某种明确的方式访问端口 80 或 443,则...)

所以你只暴露 1/2 端口(例如 80 + 443),其他一切都受到你的反向代理的保护

当你需要不同的容器时,请注意我分离网络。

  • bash 可以访问 db 和 smtp
  • db 没有访问 smtp 也没有 nginx
  • nginx 可以访问 bash
  • nginx 可以访问代理网络以暴露 80 和 443
  • 除了 nginx
  • 没有其他容器暴露在外面

    --
    version: "3"
    services:
    bash:
    ####### use hostname "smtp" as SMTP server
    image: bash
    depends_on:
    - db
    networks:
    - smtp_internal_network
    - internal_network
    - data_network
    volumes:
    - ../html:/var/www/html
    restart: always
    db:
    image: percona:5.7
    # ports: # for debug connections and querys
    # - 3306:3306
    volumes:
    - ../db_data:/var/lib/mysql
    environment:
    MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    MYSQL_DATABASE: ${MYSQL_DATABASE}
    MYSQL_USER: ${MYSQL_USER}
    MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    networks:
    - data_network
    restart: always
    smtp:
    image: mwader/postfix-relay
    environment:
    - POSTFIX_myhostname=smtp.domain.tld
    networks:
    - smtp_internal_network
    restart: always
    nginx:
    image: nginx
    volumes:
    - ../html:/var/www/html
    networks:
    - external_network
    - internal_network
    labels:
    - "traefik.backend=nginx_${COMPOSE_PROJECT_NAME}"
    - "traefik.port=80"
    - "traefik.frontend.rule=Host:${FRONTEND_RULE}"
    - "traefik.frontend.passHostHeader=true"
    - "traefik.enable=true"
    - "traefik.docker.network=traefik_proxy"
    restart: always
    depends_on:
    - db
    - bash


    networks:
    external_network:
    external:
    name: traefik_proxy
    internal_network:
    driver: bridge
    smtp_internal_network:
    driver: bridge
    data_network:
    driver: bridge

    编辑:
    version: "3"
    volumes:
    [...]

    services:
    ####### use hostname "smtp" as SMTP server in your application
    application:
    restart: always
    build: ./application
    depends_on:
    - mariadb
    volumes:
    [...]
    ports:
    - "80:80"
    - "443:443"
    - "5669:5669"
    deploy:
    restart_policy:
    window: 300s
    networks:
    - smtp_external_network
    - data_network

    mariadb:
    restart: always
    image: mariadb
    command: mysqld --sql-mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    networks:
    - data_network
    volumes:
    [...]
    environment:
    MYSQL_RANDOM_ROOT_PASSWORD: "yes"
    deploy:
    restart_policy:
    window: 300s

    networks:
    smtp_external_network:
    external:
    name: [ReplaceForFolderParentNameOfSmtpYmlWithoutSquareBrackets]_smtp
    data_network:
    driver: bridge

    --- (in your other file)

    services:
    smtp:
    restart: always
    build: ./postfix
    networks:
    - smtp
    deploy:
    restart_policy:
    window: 300s

    networks:
    smpt:
    driver: bridge

    关于bash - 使用 postfix 容器从容器发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49674947/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com