90
111

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerでコンテナの内部IPを調べる

Last updated at Posted at 2018-03-28

追記 (2018/10/30)
コメントいただいてるやり方が一番よさそうです

#前提
以下のdocker-compose.ymlのように、"app-tier"ネットワークにPHP(Laravel)コンテナとMariaDBコンテナが作られる設定。
PHPコンテナ内のDB接続情報ファイル(私の場合Laravelだったので.env)にMariaDBコンテナの情報を書かなきゃいけないが、DBユーザ名とパスワードはdocker-compose.ymlに書いてる通りrootでいいが、IPアドレスがわからず詰まったのでメモ。

docker-compose.yml
version: '3'

networks:
  app-tier:
    driver: bridge

services:

  php:
    build: ./php
    volumes:
      - ./php/src/:/var/www/html/
      - ./php/vhost.conf:/etc/httpd/conf.d/vhost.conf
      - ./php/php.ini:/usr/local/etc/php/php.ini
    ports:
      - '80:80'
    command: cd /var/www/html && composer install
    command: /usr/sbin/httpd -D FOREGROUND
    networks:
      - app-tier

  my-mariadb:
    image: mariadb:latest
    restart: always
    volumes:
      - ./db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: root
      MYSQL_PASSWORD: root
    ports:
      - "3306:3306"
    networks:
      - app-tier
    

##手順1
普通にdockerコンテナ起動

shell
docker-compose up -d

##手順2
コンテナID取得

shell
docker ps

CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                    NAMES
5a329e211caf        laravel5_php                "/usr/sbin/httpd -D …"   13 minutes ago      Up 13 minutes       0.0.0.0:80->80/tcp       laravel5_php_1
c7abb13d9a8b        mariadb:latest              "docker-entrypoint.s…"   13 minutes ago      Up 13 minutes       0.0.0.0:3306->3306/tcp   laravel5_my-mariadb_1

##手順3
DBサーバーにbashで入る

shell
docker exec -it c7abb /bin/bash

##手順4
DBサーバー上のシェルで自身のIP取得

DBコンテナ内のshell
root@c7abb13d9a8b:/# hostname -i
172.20.0.3

または

DBコンテナ内のshell
root@c7abb13d9a8b:/# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.20.0.3	c7abb13d9a8b

DBコンテナの内部IPが172.20.0.3とわかったので、PHPコンテナから接続先のDBコンテナを指定できる。

ただしdocker-compose downでコンテナを削除したあと再度コンテナを生成するとIPが変わる気がする。
「dockerのコンテナに固定IPを振る」https://qiita.com/reflet/items/e10442c16834a9ce15b3
で解決ですね

(追記)コメントにある解決方法の方がスマートです

90
111
2

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
90
111

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?