我尝试设置一个nginx-proxy容器,通过端口80上的子域而不是特殊端口访问我的其他容器.你可以猜到,我无法让它发挥作用.
我对Docker本身有点新意,发现编写docker-compose.yml文件对我来说更舒服,所以我不必经常编写长docker run ...命令.我认为你如何启动容器没有区别,无论是用docker还是用docker-compose.然而,我注意到的一个区别是启动容器docker并不会创建任何新的网络,但之后docker-compose会有一个xxx_default网络.
我读到不同网络上的容器无法互相访问,这可能是nginx-proxy没有将请求转发给其他容器的原因.但是,我无法找到一种方法来配置我的docker-compose.yml文件以不创建任何新网络,而是加入默认的桥接网络,如同docker run.
我尝试了下面这个,但是它导致了一个错误,说我无法加入这样的系统网络:
networks:
default:
external:
name: bridge
Run Code Online (Sandbox Code Playgroud)
我也尝试过network_mode: bridge,但这似乎没有任何区别.
如何编写docker-compose.yml文件以不创建新网络,或者根本不可能?
奖金问题:我应该知道docker和之间是否存在其他差异docker-compose?
我想连接两个Docker容器,它们在Docker-Compose文件中相互定义(app和db).其中一个(app)也应该连接到host网络.
容器应连接到公共用户定义的网络(appnet或default),以使用来自docker网络的嵌入式DNS功能.
app 还需要直接连接到主机网络以接收泊坞主机的物理网络中的以太网广播(网络层2).
如果我同时使用这两个指令network_mode: host并networks在一起撰写,我会收到以下错误.
ERROR: 'network_mode' and 'networks' cannot be combined
所以我只能这样做networks!?
version: "3.3"
services:
app:
build: .
image: app
container_name: app
environment:
- MONGODB_HOST=db
depends_on:
- db
networks:
- appnet
- hostnet
db:
image: mongo:latest
container_name: db
networks:
- appnet
networks:
appnet:
hostnet:
external:
name: host
Run Code Online (Sandbox Code Playgroud)
上述撰写文件会产生错误.
ERROR: for app network-scoped alias is supported only for containers …