Docker从容器访问localhost端口

时间:2017-10-27 10:56:37

标签: docker docker-compose

我有一个运行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并通过链接连接它们。如果它是唯一的选择,我会。

4 个答案:

答案 0 :(得分:3)

docker-compose.yaml文件中的

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