LoginSignup
1
1

More than 1 year has passed since last update.

別のコンテナにあるdbに接続したい

Posted at

別のコンテナにあるdbに接続したい場合。
(別のDocker Composeファイル(.ymlファイル) で設定しているコンテナに接続したい場合)

apple-apiからcarot_dbに接続したい

元yamlファイル

apple/docker-compose.yaml

version: "3"

services:
  db:
    build:
      context: "."
      dockerfile: ./orange/Dockerfile
    container_name: orange-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: apple
      MYSQL_USER: iphone
      MYSQL_PASSWORD: iphonese
      TZ: 'Asia/Tokyo'
    volumes:
      - ./db/data:/var/lib/mysql
    ports:
      - 3306:3306
    networks:
      - apple_net

  api:
    build:
      context: "."
      dockerfile: ./apple/Dockerfile
    container_name: apple-api
    volumes:
      - "../app:/go/src"
    ports:
      - "8080:8080"
    tty: true
    networks:
      - apple_net

networks:
  apple_net:
    driver: bridge

carot/docker-compose.yaml

version: '3.6'
services:
  mysql:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    container_name: "carot_db"
    hostname: "carot_db"
    ports:
      - "3316:3306"
    volumes:
      - "./hoge:/hoga"
      - "./ugo:/uga"
    environment:
      MYSQL_ROOT_PASSWORD: password
      TZ: Asia/Tokyo

apple/docker-compose.yamlを修正

version: "3"

services:
  db:
    build:
      context: "."
      dockerfile: ./orange/Dockerfile
    container_name: orange-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: apple
      MYSQL_USER: iphone
      MYSQL_PASSWORD: iphonese
      TZ: 'Asia/Tokyo'
    volumes:
      - ./db/data:/var/lib/mysql
    ports:
      - 3306:3306
    networks:
      - apple_net

  api:
    build:
      context: "."
      dockerfile: ./apple/Dockerfile
    container_name: apple-api
    volumes:
      - "../app:/go/src"
    ports:
      - "8080:8080"
    tty: true
    networks:
      - apple_net
      - carot_db_default

networks:
  apple_net:
    driver: bridge
  carot_db_default:
    external: true

参照
https://docs.docker.jp/compose/compose-file.html#id63

carot_db_defaultはどこから来た??

carot/docker-compose.yamlではnetworksの設定をしていないので
確認する必要があった。

docker network ls 
NETWORK ID     NAME                    DRIVER    SCOPE
7beb35729a36   bridge                  bridge    local
5356019c2b25   carot_db_default        bridge    local
030857de59a3   docker_container-link   bridge    local
5c490e6b8809   docker_apple_net        bridge    local
b32dc86cede2   host                    host      local
207b881e58ds   none                    null      local

docker network ls で出た結果一覧を上から
docker inspectで確認。

docker inspect carot_db_default
略
"Containers": {
    "9aa972e700a3faff897177dd9ce8f4df2a7b929984f87afcd8faf13edbd93e2b": {
        "Name": "carot_db",
        "EndpointID": "a671f5a445611fd21b3699a33d2012c829b2ed4f337d209c406423fea9a68545",
        "MacAddress": "02:42:ac:14:00:03",
        "IPv4Address": "172.20.0.3/16",
        "IPv6Address": ""
    },
},
略

コンテナ名を確認できた。
carot_dbはcarot_db_defaultネットワークを使用している事が
わかった為apple/docker-compose.yamlに記述している。

external: true

networksの設定だけで(external: true無しで)docker-composeを起動すると
そんなnetworkはないというエラーが出てしまうので
外部のものを使用します、ということでexternal: trueが設定されるらしい。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1