我有两个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服务器网站在域中可用?