通过docker compose将envs传递给db



我在通过docker compose传递env时遇到问题,下面是我的代码:

docker-compose.yml

version: '3.7'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
ports:
- 8080:8080
expose: 
- '8080'
command: npm run start
environment: 
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_PORT: ${MYSQL_PORT}
MYSQL_USERNAME: ${MYSQL_USERNAME}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}

Dockerfile

FROM node:12.17-alpine as builder
WORKDIR /build
COPY package*.json ./
RUN npm install
COPY . .
RUN  npm build
CMD [ "npm", "run", "start"]

db.config

host: process.env.MYSQL_HOST,
port: process.env.MYSQL_PORT ? +process.env.MYSQL_PORT : 3306,
username: process.env.MYSQL_USERNAME,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,

我通过MYSQL_HOST= MYSQL_PORT= MYSQL_USERNAME= MYSQL_PASSWORD= MYSQL_DATABASE= docker-compose up -d启动我的docker compose

为什么在成功构建我的应用程序后,从构建图像的docker控制台我得到了如下错误:

[Nest] 36 - 05/05/2021, 6:03:46 PM [ExceptionHandler] connect ECONNREFUSED 127.0.0.1:3306 +2ms
Error: connect ECONNREFUSED 127.0.0.1:3306

我在xaamp上向本地数据库提供正确的凭据,如"localhost"、"root"等,但这在docker:/上不起作用

有人能告诉我怎么了吗?

谢谢你的帮助!

在我看来,你是在告诉它在localhost找到你自己,但从你的容器内部来看,localhost意味着容器本身,而不是你的主机系统。


如果您而不是使用linux,请尝试MYSQL_DATABASE=host.docker.internal(我还没试过(

如果正在使用linux,请尝试MYSQL_DATABASE=172.17.0.1(我只是试着卷曲我的主机,它完全有效(

相关内容

  • 没有找到相关文章

最新更新