在this question之后,我编辑了我的网关容器以使用host
网络模式:
services:
gateway:
...
network_mode: "host"
然后docker compose up -d
会给出这个
来自守护程序的错误响应:无法将接口veth 701 c890添加到沙箱:将接口“veth 701 c890”IP设置为172.26.0.11/16:时出错,无法在沙盒接口中对地址172. 26. 0. 11/16进行编程,因为它与现有路由{Ifindex:4日期:172.26.0.0/16来源:172.26.0.1 Gw:旗标:[]表格:254
我重新启动了docker甚至服务器都没成功。docker-compose.yml
如下所示(只有gateway
容器具有已发布的端口):
version: '3.4'
services:
gateway:
image: <ms-yarp>
environment:
- ASPNETCORE_URLS=https://+:443;http://+:80
ports:
- "80:80"
- "443:443"
volumes:
- ./tls/:/tls/
networks:
- mynet
restart: on-failure
orders:
image: <registry>/orders
environment:
- ASPNETCORE_URLS=http://+:80
networks:
- mynet
restart: on-failure
users:
image: <registry>/users
environment:
- ASPNETCORE_URLS=http://+:80
networks:
- mynet
restart: on-failure
smssender:
image: <registry>/smssender
environment:
- ASPNETCORE_URLS=http://+:80
networks:
- mynet
restart: on-failure
logger:
image: <registry>/logger
environment:
- ASPNETCORE_URLS=http://+:80
networks:
- mynet
restart: on-failure
notifications:
image: <registry>/notifications
environment:
- ASPNETCORE_URLS=http://+:80
networks:
- mynet
restart: on-failure
cacheserver:
image: <registry>/redis
networks:
- mynet
restart: on-failure
...
networks:
mynet:
2条答案
按热度按时间oxf4rvwz1#
您不能将主机网络与任何其他Docker网络选项结合使用。如果您将
network_mode: host
与其他networks:
或ports:
选项结合使用,至少某些版本的Compose会发出警告。在这个特定的设置中,主机网络的另一个含义是,使用它的一个容器是“外部Docker”,以便连接到其他容器。它的工作方式与非容器进程完全相同。这意味着其他容器需要发布
ports:
才能从网关访问,而网关配置又需要使用localhost
和公布的端口号来到达其它容器。第一个
pexxcrt22#
大概是这样的:(不适用于Windows WSL2上的Docker Desktop,至少我甚至无法运行docs中的nginx示例)
此外,在网关服务配置中,您还需要更改
从订单80到本地主机8080
从http://users:80更改为http://localhost:8081等等
此外,将8080至8083的Docker主机上的端口限制为只能从本地主机访问,而不能从Internet访问。
您甚至可以将所有容器(网关除外)放到另一个只能从运行网关容器的Docker主机访问的Docker主机上,并将网关中的配置从http://orders:80更改为http://otherdockerhost:80,等等。
但是,对于此Docker组合将不可行,您将需要使用
docker run
命令“手动”创建容器(或者有两个单独的组合项目,一个用于网关,另一个用于其余服务),因此这是需要更严格的容器编排工具(如kubernetes)的地方(您可以尝试DockerSwarm或Nomad或任何其他容器编制器,但这些都不是那么受欢迎,所以如果你是新的两个kubernetes和码头群或所有其他你最好从kubernetes开始,从长远来看,你会收获这个项目和你的个人运营商的好处)