search
LoginSignup
9

More than 1 year has passed since last update.

posted at

updated at

Organization

【Docker】MySQLワークベンチに繋がらない…DBコンテナのポートフォワーディングの設定

Dockerを個人的にいじっていて遭遇した問題。
ポートを変更したいけど、うまく行かなかったときの解決策メモ。
いいやり方があれば教えて下さい。

MySQLコンテナのポートフォワーディングを変更したい

# docker-compose.yml
version: "3"
services:
  db:
    build:
      context: ./docker/mysql
    container_name: db
    volumes:
      - db-store:/var/lib/mysql
      - db-logs-store:/var/log/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      - MYSQL_DATABASE=${DB_NAME:-JETmysql}
      - MYSQL_USER=${DB_USERNAME}
      - MYSQL_PASSWORD=${DB_PASS}
      - MYSQL_ROOT_PASSWORD=${DB_PASS}
      - TZ=${TZ:-Asia/Tokyo}
    ports:
      - ${DB_PORT}:3307 #アクセスするポート:コンテナ内のポート
volumes:
  db-logs-store:
  db-store:
  redis-store:

# .env
DB_CONNECTION=mysql
DB_HOST=db #0.0.0.0
DB_PORT=3307

ポートフォワードというのは特定のポートにやってきた通信リクエストを、
転送してあげることです。
通常、MySQLの場合3306番が使われますが、競合を避けたい事情で3307を
あてがおうと考えました。

上記YMLの、ports部分にポートを定義します。
${DB_PORT}部分は、envファイルから引っ張るようになっています。
左側がポートフォワーディング先、右側がDockerコンテナ内部で使用されるポート番号です。
「ローカルのポート3307にリクエストが来たら、コンテナ内の3307につないでね」という意味です。
コンテナはローカル端末とは隔離されたネットワークという位置づけのため、
コンテナ内部でもポート番号があるという認識です。

ここだけ定義すれば、よしなにやってくれるのかと思っていたのですが、
3306以外ではなぜか繋がらないという事象に見舞われました。
今回はMySQLワークベンチというGUIを接続しようとしていました。

Screen Shot 2020-10-31 at 13.55.00.png

docker-compose ps

           Name                           Command               State                Ports
-------------------------------------------------------------------------------------------------------
db                              docker-entrypoint.sh --por ...   Up       3306/tcp, 33060/tcp,
                                                                          0.0.0.0:3307->3307/tcp

定義されているように見える。。

docker runする場合のポート指定

docker run -p 3307:3307 db

これだとうまくいきます。
だとすれば、コマンドでポート指定すればうまくいく?

ymlにコマンドを追記


    ports:
      - ${DB_PORT}:3307 #アクセスするポート:コンテナ内のポート
    command: --port 3307

Screen Shot 2020-10-31 at 13.56.49.png

うまく接続できたようです。
なぜポート指定のコマンドが必要なのかわかりませんが、
一応これで動くようです。

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
What you can do with signing up
9