Docker从容器中访问localhost端口
我有一个容器运行由docker_composes.yml
定义的Nuxt.js(Vue.js)应用程序:
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
上运行本地主机上的后端。 当容器化的应用程序尝试连接到http://localhost:5000/
失败。
我有什么select? 我不想将后端放入docker_composes.yml
并通过链接连接它们。 如果这是唯一的select,我会的。
一个容器可以相互通信的方式是当它们连接到一个公共networking时。 他们可以使用容器名称互相引用。 示例前端可以使用backend:5000
到达后端backend:5000
后端是后端容器的名称。
为了实现这一点,使用docker network create app-network
networking来docker network create app-network
。 使用docker container attach <backend-container> 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
你可以尝试使用
network_mode:“主机”
https://docs.docker.com/compose/compose-file/#network_mode
如果你在Windows或Mac上,你应该可以使用:
docker.for.win.localhost
要么
docker.for.mac.localhost