LoginSignup
10

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-31

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
  3. You can use dark theme
What you can do with signing up
10