Я пытаюсь заставить мой контейнер экспресс-док узла взаимодействовать с моим контейнером mysqldb.Но когда я запрашиваю, я всегда получаю: «connect ECONNREFUSED 127.0.0.1:3306».Что я делаю не так?
Вот мой docker-compose.yml.Это раскручивает мои два контейнера.my-api работает, если я просто использую экспресс без контейнера.Но не тогда, когда это в одном.Когда он работает в Docker, кажется, что Express работает нормально, но он не будет подключаться к базе данных в другом контейнере.
services:
api:
image: node:8
container_name: my-api
build:
context: .
dockerfile: Dockerfile
command: npm run start
volumes:
- .:/usr/app/
- /usr/app/node_modules
ports:
- "3000:3000"
depends_on:
- mysqldb
expose:
- 3000
environment:
PORT: 3000
REACT_APP_BASE_URL: http://localhost:3000
DB_HOST: localhost
DB_NAME: test
DB_USER: test
DB_PASS: test
mysqldb:
image: mysql:5.7
container_name: mysqldb
command: mysqld --user=root --verbose
volumes:
- ./schemadump.sql:/docker-entrypoint-initdb.d/schemadump.sql
ports:
- "3306:3306"
expose:
- 3306
environment:
MYSQL_DATABASE: "test"
MYSQL_USER: "test"
MYSQL_PASSWORD: "test"
MYSQL_ROOT_PASSWORD: "root"
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
Вот мой файл Docker
FROM node:8
WORKDIR /usr/src/app
COPY ./package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]
Вот мой файл подключения к базе данных:
const mysql = require('mysql')
module.exports = function databaseCall (sql) {
const connection = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME
})
...
}