我在通过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
(我只是试着卷曲我的主机,它完全有效(