English 中文(简体)
利用cker器和 do器连接 no子数据库
原标题:Connecting nodejs app to a mysql database using docker and docker-compose

I m trying to connect my node.js app with a mysql database This is my dockerfile

FROM node:latest  
WORKDIR /app 
COPY . /app 
RUN npm update 
RUN npm install 
RUN npm rebuild bcrypt 
ENV SERVER_PORT 3000 
EXPOSE $SERVER_PORT 
CMD ["npm", "start"]

这是我的cker弄手套。

 services:
mysqldb:
image: mysql:8.0
container_name: mysqlcontainer
command: --default-authentication-plugin=mysql_native_password
restart: unless-stopped
volumes:

- ./dbinit/init.sql:/docker-entrypoint-initdb.d/0_init.sql

- $HOME/database:/var/lib/mysql
  ports:

- 3306:3306
  expose:

- 3306
  environment:
  MYSQL_DATABASE: hotel_managment
  MYSQL_USER: admin
  MYSQL_PASSWORD: letmein
  MYSQL_ROOT_PASSWORD: letmein

      SERVICE_TAGS: prod
      SERVICE_NAM: mysqldb 

  networks:
  - internalnet

nodeapp:
container_name: nodeappcontainer
build: .
image: nodeapp:v1
ports:

- 3000:3000
  expose:
- 3000
  depends_on:
- mysqldb
  environment:
  DB_HOST: mysqldb
  DB_USER :  root 
  DB_PASSWORD:  letmein 
  DB_NAME : hotel_managment
  DB_PORT : 3306
  DB_CONNECTION_LIMIT : 10
  SERVER_PORT : 3000
  SERVICE_TAGS: prod
  SERVICE_NAME: nodeappservice
  networks:
- internalnet

networks:
internalnet:
driver: bridge

这是我的项目。

这是我的手脚。

DB_HOST = localhost 
DB_USER = root 
DB_PASSWORD = letmein 
DB_NAME = hotel_managment 
DB_PORT = 3306 
DB_CONNECTION_LIMIT = 10 
SERVER_PORT = 5000

而这正是在以下地点与数据库连接一米:js

let connection = mysql.createConnection({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,

});

I m run run command comp comp comp comp

ANd I m getting this error : `> [email protected] start

node -r dotenv/config app.js server is listening on port: 3000 [email protected] start node -r dotenv/config app.js server is listening on port: 3000 Error connecting to database: Error: connect ECONNREFUSED 172.22.0.2:3306 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) { errno: -111, code: ECONNREFUSED , syscall: connect , address: 172.22.0.2 , port: 3306, fatal: true }`

I tried everything and nothing worked

问题回答

If you re running the node app from within Docker, then I think you just need to use the container name in your .env file:

DB_HOST=mysqlcontainer 
DB_USER=root 
DB_PASSWORD=letmein 
DB_NAME=hotel_managment 
DB_PORT=3306 
DB_CONNECTION_LIMIT=10 
SERVER_PORT=5000

从Docker的角度来看, localhost不是指我的sql集装箱。





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签