网络连接问题
1. 如何连接未在 docker-compose.yaml 中声明的服务?
创建一个专属网络 web-net ,并将已存在的容器添加进来
docker network create web-net
# 除了使用命令链接,也可以在容器创建时指定 --network web-net
docker network connect web-net some-mongo # some-mongo 为 mongodb 的容器名
定义 docker-compose.yaml
version: '3.2'
services:
pb:
image: ptpb/pb:latest
ports:
- '10002:10002'
external_links:
- "some-mongo:mongodb" # 链接外部网络中的容器,取别名 mongodb
volumes:
- .:/pb
environment:
- 'LISTEN_ADDRESS=::' # 请填写具体的域名
- 'LISTEN_PORT=10002'
- 'CDN_PREFIX=//d34zelngniy2d8.cloudfront.net'
networks:
- default # 默认为 default,这一选项可以省略
networks:
default: # 将本网络与外部网络链接
external:
name: web-net
这样,执行 docker-compose up,就会创建名为 ${pwd}_pb_1 这个容器,并连接到 web-net 中的 mongodb 服务。
2. 使用 Caddy 管理网络
① caddy docker-compose.yml
version: '3.2'
services:
some-caddy:
image: abiosoft/caddy
restart: always
ports:
- '80:80'
- '443:443'
volumes:
- ./Caddyfile:/etc/Caddyfile
environment:
- ACME_AGREE=true
networks:
default:
external:
name: web-net
②连接网络
docker network connect web-net some-caddy # 将 caddy 容器添加到 web-net 网络
③ Caddyfile
paste.lemo.site {
proxy / pb:10002 {
transparent
}
gzip
log ../access.log
tls abc@xxx.com
}
3. 注意事项
关于容器间访问与非容器间访问:
docker-compose.yml 中配置的 ports 用于非容器间访问(比如浏览器客户端访问)。因为容器间访问通常不需要配置 ports 的,比如访问 mysql,通常使用 http://mysql:3306 访问,而无须管你的 3306映射到哪个端口(因为 ports 只针对非容器见访问)。
4. 一些博客
5.共享数据卷
https://segmentfault.com/a/1190000011209501
6.将当前容器更新
docker-compose pull
docker-compose up -d --no-deps --build