#Docker Compose 方式下容器网络
##背景
我们项目使用docker compose 部署服务,之前后端服务访问数据库都是通过数据库服务映射到主机的特定端口来访问。近期出于安全方面的考虑的,我们需要让后端服务和数据库通信走容器内部网络。
为了解决这个的问题,就需要了解一下容器间网络通信的基础。
networks
container name
在使用Compose启动容器时,Compose 默认给你的 app 设置一个网络。 service 中的每个容器默认都加入这个网络,容器之间彼此是互通的。并且,可以利用容器名字识别到。
Note: 你 app 的网络默认情况下是和你的
project name
有关的。这个project name
其实就是你 docker-compose.yml 文件存放的那个目录的名字。比如,目录名叫db
,那么默认情况下会创建一个叫db_default
的网络。你可以使用--project-name
或COMPSE_PROJECT_NAME
环境变量。
举个栗子,docker-compose.yml
:
version: "2.1"
services:
web:
image: nginx
ports:
- "8080:80"
busybox:
image: busybox
entrypoint:
- top
这个文件放在project
目录下当我们执行了 docker-compose up -d
之后:
- 一个叫
project_default
的网络将会被创建。
- web 和 busybox 容器将会被创建,并加入
project_default
网络中
project $ docker network ls
NETWORK ID NAME DRIVER SCOPE
f17520060e9d bridge bridge local
a3028588ea24 host host