我使用 Typescript
写了一个应用程序,它使用 Typeorm
与 MySQL
数据库交互。当我使用 npm run dev
运行该应用程序时,连接使用以下凭据工作正常:
"type": "mysql",
"host": "127.0.0.1",
"port": 3306,
"username": "root",
"password": "root",
"database": "mydb",
但是当我启动Docker
容器时,我会得到以下错误:
> Error: connect ECONNREFUSED 127.0.0.1:3306
> errno: -111,
> code: 'ECONNREFUSED',
> syscall: 'connect',
> address: '127.0.0.1',
> port: 3306,
> fatal: true
我无法解决这个问题,我也尝试将
127.0.0.1
更改为localhost
,但问题仍然存在。很奇怪,因为我正在使用Dbeaver
连接我的LAMP
,这也是一个Docker
容器,我可以建立连接。似乎只涉及容器之间的连接问题,也许应用程序的容器不知道网络
127.0.0.1
?这是我的镜像文件:
FROM node:stretch-slim
WORKDIR /myapp
COPY package.json ./
COPY ./dist ./dist
RUN npm install
EXPOSE 4000
ENV NODE_ENV development
ENV PORT 4000
ENV URL http://localhost:4000
ENV JWT_SECRET secret
CMD ["npm", "run", "start", "dev"]
这是我的docker-compose.yml
文件:
version: '3'
services:
app:
container_name: myapp
restart: always
build: .
ports:
- '4000:4000'
为了编译我的容器,我执行了以下命令:
docker-compose up --build
有什么问题吗?从我的lamp
容器中可以看到,每个端口都被正确地暴露出来:
lamp_db_1
是数据库主机名,请使用它代替 localhost 或 127.0.0.1。 - undefineddocker-compose.yml
文件中(这些容器名称表明它们是),Compose 服务块的名称db
也可以作为主机名使用。在 Docker 中,localhost
几乎总是指向“此容器”,而不是其他容器或主机。 - undefinedhost: 172.17.0.1
,它是可以工作的,但是是否可能共享mysql容器的网络? - undefined