質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

解決済

docker-composeでのnode(loopback)とmysqlの疎通エラー

sanezane
sanezane

総合スコア91

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1回答

0評価

1クリップ

403閲覧

投稿2021/10/16 17:45

やりたいこと

node(フレームワーク: loopback4)での環境をapp, データベースをdbとしてdocker-composeで構築し疎通したい

現状

docker-compose up時にappがエラーで停止する(ローカルからdbへの接続は確認済み)

エラー内容

Error: connect ECONNREFUSED 127.0.0.1:3306 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1146:16) app_1 | errno: -111, app_1 | code: 'ECONNREFUSED', app_1 | syscall: 'connect', app_1 | address: '127.0.0.1', app_1 | port: 3306, app_1 | fatal: true

やったこと

  • dbとの接続のために指定するhostをdocker-composeのサービス名(db)へ変更
  • my.cnfの外部ホストからの接続設定をbind-address=127.0.0.1からbind-address=0.0.0.0へ変更
  • デバッグ方法などご教授いただけるととても嬉しいです。

現在のDockerfile, docker-compose.yml

yml

version: "3.8" volumes: mydata: db-store: services: app: build: context: . dockerfile: Dockerfile volumes: - type: volume source: mydata target: /data volume: nocopy: true - type: bind source: ./src target: /work/src environment: - DB_CONNECTION=mysql - DB_HOST=db - DB_PORT=3306 - DB_DATABASE=${DB_NAME} - DB_USERNAME=${DB_USER} - DB_PASSWORD=${DB_PASS} depends_on: - db - db-testing ports: - "3000:3000" db: image: mysql:8.0 volumes: - db-store:/var/lib/mysql - ./logs:/var/log/mysql - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf environment: - MYSQL_DATABASE=${DB_NAME} - MYSQL_USER=${DB_USER} - MYSQL_PASSWORD=${DB_PASS} - MYSQL_ROOT_PASSWORD=${DB_PASS} - TZ=${TZ} ports: - ${DB_PORT}:3306 db-testing: image: mysql:8.0 volumes: - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf tmpfs: - /var/lib/mysql - /var/log/mysql environment: - MYSQL_DATABASE=${DB_NAME} - MYSQL_USER=${DB_USER} - MYSQL_PASSWORD=${DB_PASS} - MYSQL_ROOT_PASSWORD=${DB_PASS} - TZ=${TZ}
  • dockerfile
# Check out https://hub.docker.com/_/node to select a new base image FROM node:16-slim # Set to a non-root built-in user `node` USER node # Create app directory (with user `node`) RUN mkdir -p /home/node/app WORKDIR /home/node/app # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+) COPY --chown=node package*.json ./ RUN npm install # Bundle app source code COPY --chown=node . . RUN npm run build # Bind to all network interfaces so that it can be mapped to the host OS ENV HOST=0.0.0.0 PORT=3000 EXPOSE ${PORT} CMD [ "node", "." ]

mysql起動時に読み込ませるmy.cnf

[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqldump] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_bin lower_case_table_names=1 # Enable access from the host machine. bind-address=0.0.0.0

mysqlとの疎通のためにapp側へ入れているライブラリ

"loopback-connector-mysql": "^6.0.2",
  • package.json全体
{ "name": "mysql-tutorial", "version": "0.0.1", "description": "sample", "keywords": [ "loopback-application", "loopback" ], "main": "dist/index.js", "types": "dist/index.d.ts", "engines": { "node": ">=10.16" }, "scripts": { "build": "lb-tsc", "build:watch": "lb-tsc --watch", "lint": "yarn run eslint && yarn run prettier:check", "lint:fix": "yarn run eslint:fix && yarn run prettier:fix", "prettier:cli": "lb-prettier \"**/*.ts\" \"**/*.js\"", "prettier:check": "yarn run prettier:cli -l", "prettier:fix": "yarn run prettier:cli --write", "eslint": "lb-eslint --report-unused-disable-directives .", "eslint:fix": "yarn run eslint --fix", "pretest": "yarn run rebuild", "test": "lb-mocha --allow-console-logs \"dist/__tests__\"", "posttest": "yarn run lint", "test:dev": "lb-mocha --allow-console-logs dist/__tests__/**/*.js && yarn run posttest", "docker:build": "docker build -t mysql-tutorial .", "docker:run": "docker run -p 3000:3000 -d mysql-tutorial", "premigrate": "yarn run build", "migrate": "node ./dist/migrate", "preopenapi-spec": "yarn run build", "openapi-spec": "node ./dist/openapi-spec", "prestart": "yarn run rebuild", "start": "node -r source-map-support/register .", "clean": "lb-clean dist *.tsbuildinfo .eslintcache", "rebuild": "yarn run clean && yarn run build" }, "repository": { "type": "git", "url": "" }, "author": "yosuke0517 <yosuke.takeuchi.dev@gmail.com>", "license": "", "files": [ "README.md", "dist", "src", "!*/__tests__" ], "dependencies": { "@loopback/boot": "^3.4.3", "@loopback/core": "^2.17.0", "@loopback/repository": "^3.7.2", "@loopback/rest": "^10.0.1", "@loopback/rest-explorer": "^3.3.3", "@loopback/service-proxy": "^3.2.3", "loopback-connector-mysql": "^6.0.2", "tslib": "^2.0.0" }, "devDependencies": { "@loopback/build": "^7.0.1", "@loopback/eslint-config": "^11.0.1", "@loopback/testlab": "^3.4.3", "@types/node": "^10.17.60", "eslint": "^7.32.0", "source-map-support": "^0.5.20", "typescript": "~4.3.5" } }

DB接続の設定ファイル(db.datasource.ts)

const config = { name: 'db', connector: 'mysql', url: '', host: 'db', port: 3306, user: 'loopback', password: 'password', database: 'demo' };

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hentaiman

2021/10/17 00:24

ログの内容はdb.datasource.tsの設定が使われてないように見えますね 作ったdb.datasource.tsが使われてない可能性はないですか
sanezane

2021/10/17 04:32 編集

ご指摘のおかげで調査が進み、解決しました(自己解決として記載)。大変助かりました!

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです