如何解决Docker 中的 WSL2 Caddy 反向代理
我有一个在 Docker 中运行的 Caddy 服务器与 Node.JS 服务器通信。此设置目前适用于 MacOS,但不适用于 WSL2。我认为这个问题与我们在 Caddyfile 中使用 http://host.docker.internal:3000
作为代理地址有关,但我不知道如何编写它,因此它适用于 WSL2 和 MacOS。
docker-compose.yml:
version: '3.7'
services:
caddy:
image: 'abiosoft/caddy:latest'
volumes:
- ./certs:/root/certs # to sync mkcert certificates to Caddy
- ./Caddyfile:/etc/Caddyfile # to mount custom Caddyfile
ports:
- '443:2015'
db:
container_name: service_local_db
image: MysqL:8.0
environment:
MysqL_DATABASE: 'service_local'
MysqL_ROOT_PASSWORD: '******'
ports:
- '3306:3306'
expose:
- '3306'
volumes:
- database_volume:/var/lib/MysqL
volumes:
database_volume:
球童档案
servicename.url{
log stdout
tls /root/certs/servicename.local.pem /root/certs/servicename.local-key.pem
proxy / http://host.docker.internal:3000 {
websocket
transparent
header_upstream X-Marotagem true
header_upstream Host "servicename.local"
}
}
我试过了:
- 将
host.docker.internal
更改为host-gateway
。即使这确实有效,反过来也不允许它在 MacOS 上运行。 - 在 docker-compose.yml 的
'host.docker.internal:host-gateway'
下添加extra_hosts:
作为services
。它不起作用,但如果它起作用,我不确定它会如何影响 MacOS。
任何帮助将不胜感激。
解决方法
AFAIK host.docker.internal
尚未(还?)在 Docker for Linux 中实现。但由于您使用的是 bridge
网络(默认网络),您可以为主机创建一个类似于静态 IP 地址的内容。之后就不需要使用 host.docker.internal
,不过如果您愿意,您可以使用 extra_hosts
将其添加到容器中。
version: "2"
networks:
default:
ipam:
driver: default
config:
# (mandatory) IP-address range for the containers
- subnet: "10.50.0.0/24"
# (optional) IP-address of the host
# if not specified it will be the first IP-address of the subnet (10.50.0.1 in this case)
gateway: 10.50.0.20
# 'gateway' is only available in docker-compose version 2 at the moment
在本例中,gateway
将是该网络中容器的主机 IP 地址。您可以使用此值来创建有效的 extra_hosts
记录:
extra_hosts:
- "host.docker.internal:10.50.0.20"
遗憾的是,目前仅在版本 gateway
撰写文件规范中支持 2
选项,对于版本 3
,您只能指定 subnet
。如果未明确指定 gateway
,它将是范围的第一个 IP 地址(对于上面的示例为 10.50.0.1
)。
配置不需要更改,除非您偶然发现 IP 范围重叠。换句话说,如果您将运行它的机器没有子网(docker 或其他),与您选择的范围重叠,则没有问题。否则,您可以选择另一个子网并在 extra_hosts
中写入不同的地址。
另请注意,一旦创建了网络,就不允许更改 IPAM 配置。在创建新网络之前,您需要删除旧网络。使用 docker-compose down
或 docker network rm <network_name>
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。