多个Docker容器访问Docker中的主机数据库

时间:2018-08-25 00:51:04

标签: database docker docker-compose

我一直在研究如何将同一撰写文件中的多个docker容器连接到本地主机上的数据库(MySQL / MariaDB)。当前,数据库已被容器化以进行开发,但是生产需要单独的数据库。最终,数据库将部署到AWS或Azure。

关于SO有很多类似的问题,但是似乎没有一个问题可以解决这种特殊情况。

给出现有的docker-compose.yml

version: '3.1'

services:
 db:
  build:
   image: mariadb:10.3
  volumes:
   - "~/data/lib/mysql:/var/lib/mysql:Z"

 api:
  image: t-api:latest
  depends_on:
   - db

 web:
  image: t-web:latest

 scan:
  image: t-scan:latest

 proxy:
  build:
    context: . 
    dockerfile: nginx.Dockerfile
    image: t-proxy
  depends_on:
    - web
  ports:
    - 80:80

所有这些服务都在nginx之后被反向代理, api scan 服务都需要访问数据库。为简单起见,还有其他一些需要数据库访问的服务。

生产撰写文件为:

version: '3.1'

 api:
  image: t-api:latest
  depends_on:
   - db

 web:
  image: t-web:latest

 scan:
  image: t-scan:latest

 proxy:
  build:
    context: . 
    dockerfile: nginx.Dockerfile
    image: t-proxy
  depends_on:
    - web
  ports:
    - 80:80

如果只有一个容器需要数据库访问权限,我可以打开端口3306:3306,该端口不适用于多个容器。

拆分容器会破坏反向代理,并增加部署和管理的复杂性。我已经尝试过extra_hosts

extra_hosts:
  - myhost: xx.xx.xx.xx

但这会生成EAI_AGAIN DNS错误,这很奇怪,因为您可以从容器内部ping主机。我意识到这可能是不可能的

0 个答案:

没有答案