所以我有一个 VPS,它在本地主机的 8080 端口上公开一个 API 端点。
我有一个 Svelte 应用,它必须需要端点。为了构建 Svelte 应用,我docker-compose.yaml
使用
version: '3.8'
services:
frontend:
build:
context: ./frontend
target: development
volumes:
- ./frontend:/app
- /app/node_modules
ports:
- "5173:5173"
environment:
- NODE_ENV=development
在 frontend 文件夹中我有 Docker 文件
FROM node:23-alpine as development
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 5173
CMD ["npm", "run", "dev", "--", "--host"]
FROM node:23-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine as production
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
使用此设置,Svelteapp 似乎无法访问主机上的本地主机。我能够访问它的唯一方法是将行添加network_mode: host
到docker-compose. yaml
。这样,我就能够直接使用192.168.1.17访问主机的本地主机 IP ,这是我整个本地网络上的 IP。
有没有办法直接使用localhost
容器中的关键字访问本地主机 IP,或者只是不对可能改变的 IP 进行硬编码
除了 之外,没有其他方法
network_mode: host
可以使用名称访问主机localhost
。这是因为当容器位于 Docker 网络上时(默认行为),容器有自己的 IP 地址,localhost
即容器本身。在 Docker 桥接网络上,主网关是主机。您可以使用
extra_hosts
和特殊名称为其添加名称host-gateway
。通常的做法是使用主机名host.docker.internal
作为您使用的名称。因此,将 docker-compose.yml 文件更改为
现在您可以使用主机名从容器内部访问主机
host.docker.internal
。