如何让Docker组成将服务器容器公开为https?

时间:2019-12-22 04:33:54

标签: docker nginx networking docker-compose

我有两个docker linux映像,一个带有在端口80上托管应用程序的nginx服务器,另一个带有用于测试该应用程序的cypress。

我遇到的问题是该应用程序必须认为它正在使用SSL托管在给定的域中。但是在这种环境下我都没有。所以我的计划是在服务器映像的hosts文件中添加一个条目,以将域映射到localhost:

127.0.0.1 example.com

并添加一个iptables配置以将所有SSL流量路由到端口80:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 443 -j REDIRECT --to-port 80

当我在本地提供此应用程序时,此方法有效。

但是我如何在docker compose环境中使用它,却遇到了问题。到目前为止,我知道了:

version: "3"

networks:
  local-net:

services:
  dist-server:
    container_name: dist-server
    cap_add:
      - NET_ADMIN
    image:          "cypress_server"
    ports:          [ "80:80", "443:443" ]
    networks:       [ local-net ]
    extra_hosts:
      - "example.com:127.0.0.1"

  test-runner:
    container_name: test-runner
    depends_on:     [ dist-server ]
    image:          "cypress_runner"
    networks:       [ local-net ]
    environment:
      BASE_URL:     "http://dist-server" # the same as the service name above

到目前为止,我正在启动docker compose detached,然后在特权模式下运行iptables配置,然后 重新连接到它,所以我等待柏树完成运行:

docker-compose run --detach test-runner
docker-compose exec --privileged -T dist-server iptables -t nat -A OUTPUT -o lo -p tcp --dport 443 -j REDIRECT --to-port 80
docker-compose up --no-recreate test-runner

这样,赛普拉斯可以通过访问http://dist-server来访问dist服务器服务上托管的站点。

不过,我希望成为https://example.com

如何配置docker compose以使该dist服务器网站在域中可用?

0 个答案:

没有答案
相关问题