从 Docker 容器连接到主机 MySQL 数据库

问题描述 投票:0回答:1

我正在打包我的应用程序并尝试将其部署到我的服务器上。

我已经在我的服务器 MySQL 上安装并运行了一个数据库,并且我有一个 Express Node.js 应用程序想要与该数据库进行通信。

Express 应用程序将在 Docker 容器内工作,Dockerfile 是这样的:

FROM node:20-alpine
COPY . /app
WORKDIR /app
EXPOSE 3001
CMD npm install && npm run build && npm run start

这是我的

.env
文件,我用它来读取环境变量:

DATABASE_HOST= "localhost" # string ex: localhost | ip
DATABASE_PORT= 3306 # number
DATABASE_NAME= "mydatabase" # string
DATABASE_USERNAME= "myuser" # string
DATABASE_PASSWORD= "mypassword" # string

我使用

docker compose
来运行我的 Docker 容器,因为我有前端:

$ docker compose up

这是我的

docker-compose.yml
文件:

services:
  webadmin:
    build: ./web
    ports:
      - 3000:3000
  api:
    build: ./api
    ports:
      - 3001:3001
docker
1个回答
0
投票

我对我的

.env
文件进行了以下编辑,首先,我将主机设置为我的公共服务器 IP 地址:

HOST= "96.xxx.xxx.xxx" // the public ip

数据库主机是本地主机:

DATABASE_HOST= "localhost"

并且在

docker-compose
文件中,我使用了
network_mode
选项:

services:
  webadmin:
    build: ./web
    ports:
      - 3000:3000
  api:
    build: ./api
    ports:
      - 3001:3001
    network_mode: host  # <<<<<<<<<<<<<< here

现在,从 API 容器的角度来看,localhost 就像是服务器本身(主机)上的 localhost。

现在它可以工作了,我的 API 服务可以与数据库通信,并且现在已向互联网公开。

© www.soinside.com 2019 - 2024. All rights reserved.