我有一个运行Nuxt.js(Vue.js)应用程序的容器,由docker_composes.yml
定义:
version: '3'
services:
vue:
build: .
image: registry.gitlab.com/something/app:${TAG}
environment:
- apiPath="http://localhost:5000/"
- filePath="http://localhost:3000/"
ports:
- "${EXPOSED_PORT:-80}:${NUXT_PORT:-3000}"
restart: always
该应用程序是一个前端。我在端口5000
上的localhost上运行后端。
当容器化的应用程序尝试连接到http://localhost:5000/
时,它会失败。
我有什么选择?
我不想将后端放入docker_composes.yml
并通过链接连接它们。如果它是唯一的选择,我会。
答案 0 :(得分:3)
localhost
是指容器。
要访问您的本地计算机,请使用host.docker.internal
而不是localhost
。
答案 1 :(得分:2)
如果要访问主机的本地主机,则可以使用主机的IP地址。在Linux中,使用ifconfig命令获取您的IP地址。 例如:如果您的主机IP为192.168.1.7,则可以使用192.168.1.7:5000
答案 2 :(得分:1)
容器可以相互通信的一种方式是将它们连接到公共网络。他们可以使用容器名称互相引用。示例前端可以使用backend:5000
到达后端,其中后端是后端容器的名称。
要实现此目的,请使用docker network create app-network
创建一个泊坞网络。使用docker container attach <backend-container> app-network
将后端容器附加到此网络。最后,将撰写文件更新为以下内容:
version: '3'
services:
vue:
build: .
image: registry.gitlab.com/something/app:${TAG}
environment:
- apiPath="http://backend:5000/" # replace backend-container name
- filePath="http://localhost:3000/"
ports:
- "${EXPOSED_PORT:-80}:${NUXT_PORT:-3000}"
restart: always
networks:
- app-network
networks:
app-network:
external: true
答案 3 :(得分:0)
您可以尝试使用
network_mode:&#34; host&#34;
https://docs.docker.com/compose/compose-file/#network_mode
如果您使用的是Windows或Mac,则可以使用:
docker.for.win.localhost
或
docker.for.mac.localhost