Então eu tenho um VPS que expõe um endpoint de API no host local na porta 8080.
Tenho um aplicativo Svelte que precisa do endpoint. Para construir o aplicativo Svelte que estou usando docker-compose.yaml
com
version: '3.8'
services:
frontend:
build:
context: ./frontend
target: development
volumes:
- ./frontend:/app
- /app/node_modules
ports:
- "5173:5173"
environment:
- NODE_ENV=development
e dentro da pasta frontend tenho o arquivo 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;"]
Com essa configuração, o Svelteapp parece incapaz de acessar o host local na máquina host. A única maneira de acessá-lo foi adicionar a linha network_mode: host
ao docker-compose. yaml
. Dessa forma, consegui acessar o IP do host local diretamente com 192.168.1.17 , que é o IP em toda a minha rede local.
Existe uma maneira de acessar o IP do host localhost diretamente usando localhost
a palavra-chave do contêiner ou simplesmente não codificar o IP, o que pode mudar
Não há nenhuma maneira, exceto
network_mode: host
, de alcançar o host usando olocalhost
nome. Isso porque quando um contêiner está em uma rede Docker (o comportamento padrão), o contêiner tem seu próprio endereço IP elocalhost
significa o próprio contêiner.Em uma rede de ponte Docker, o gateway principal é o host. Você pode adicionar um nome para ele usando
extra_hosts
e o nome especialhost-gateway
. É uma prática comum usar o nome do hosthost.docker.internal
como o nome que você usa.Então altere seu arquivo docker-compose.yml para
Agora você pode acessar o host de dentro do contêiner usando o nome do host
host.docker.internal
.