场景三个容器digger-app: 启动 API 服务,依赖 redis 和 mysqldigger-redis: redis 服务digger-mysql: mysql 服务我们需要让 digger-app 容器内运行的服务能够访问 digger-redis 和 digger-mysql 容器。方法一:–link–link 的格式为 –link name:alias,name 为需要连接到的容器的 name,alias 是给这个连接取个别名。首先启动 redis 服务和 mysql 服务:# redisdocker run –name digger-redis -d redis:5.0.3-alpine# mysqldocker run –name digger-mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.25如果不指定 name,docker 会随机生成一个 name,使用 docker ps 可以查看到运行容器的 name。在启动 digger-app 时,指定 –link 参数:docker run –name digger-api –link digger-redis:redis –link digger-mysql:mysql -d -p 3000:3000 your-image这样在 digger-api 中就能通过 连接名 访问到对应的服务了,如与 digger-redis 的 link 别名为 redis,那么在 digger-api 代码中,可以指定 redis 的 host 为 redis,以 node.js 举例:// redis.jsconst redis = require(‘redis’);const client = redis.createClient({ host: ‘redis’, port: 6379});// mysql.jsconst mysql = require(‘mysql’);const connection = mysql.createConnection({ host : ‘mysql’, user : ‘root’, password : ‘root’, database : ‘my_db’});connection.connect();使用 docker exec 命令进入容器,使用 ping 命令也可以查看容器是否互联成功:事实上,在 digger-api 容器内,如果查看 hosts 文件,可以发现 docker 已经将另外两个容器配置在了 hosts 中:/app # cat /etc/hosts127.0.0.1 localhost…172.17.0.6 redis 7a6409598773 cache-redis172.17.0.5 mysql f08bf0e0bf18 digger-mysql172.17.0.7 6eb8dab1e6db方法二:–network随着 Docker 网络的完善,更建议将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 –link 参数。使用 –network 命令可以指定容器运行的网络,通过将多个容器指定到同一个网络可以让容器间相互访问。创建网络docker network create -d bridge my-net指定网络# redisdocker run –name digger-redis -d –network my-net redis:5.0.3-alpine# mysqldocker run –name digger-mysql -e MYSQL_ROOT_PASSWORD=root -d –network my-net mysql:5.7.25# apidocker run –name digger-api –network my-net -d -p 3000:3000 your-image不过需要注意这时候就没有连接的别名了,在容器里面,host 直接使用对方容器的 name 访问即可。方法三:docker composeDocker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。新建 docker-compose.yml 文件,编写如下version: “3"services: digger-api: image: “express:v1” ports: - “3000:3000” digger-mysql: image: “mysql:5.7.25” environment: - MYSQL_ROOT_PASSWORD=root digger-redis: image: “redis:5.0.3-alpine"docker compose 的官方文档查看 这里。然后使用 docker-compose up -d 启动即可,容器会在后台运行。