如何将docker-compose连接到容器网络和localhost网络

时间:2019-05-03 22:05:11

标签: docker docker-compose

如何设置docker-compose文件以连接到内部容器网络和外部localhost网络?

我尝试在docker-compose中使用extra_hosts属性,但无法获得所需的结果

我的docker-compose包含以下内容:

version: '3.7'

    services:

        myapp1:
            container_name: 
                  myapp1
            hostname:
                  myapp1
            build: 
                  context: 
                       .
                  dockerfile: 
                       Dockerfile
            command: 
                  ["npm", "start"]
            networks:
                  - container_network # This is an internal container network

        myapp2:
             ... # Same idea as above
            networks:
                  - container_network # This is an internal container network

    networks: 

         container_network:
              name:
                   container_network
              driver: 
                   bridge

我也有一个独立的服务,并使用以下命令运行它:

docker run --name standalone_service --network host

还有其他原因与我的问题无关,为什么standalone_service无法合并到docker-compose文件中。因此,将其合并到docker-compose文件中并使用container_network并不是此服务的选择。

我希望myapp1(它是内部container_network的一部分)能够访问主机网络上的standalone_service。我该怎么做?

1 个答案:

答案 0 :(得分:2)

鉴于您以standalone_service的身份运行--network host,它与主机上运行的任何其他进程都没有区别,并且From inside a Docker container, how do I connect to [the host] machine的各种答案应该对您有用。 / p>

第二种更可取的方法是在Docker Compose外部创建一个Docker网络,并将另一个容器附加到该网络上

docker network create container_network
docker run --net container_network -p 8888:8888 --name standalone_service ...

一旦这样做,您就可以在docker-compose.yml中声明与an external network相同的网络。您甚至可以make this be the default network,这样就不必手动配置其他服务来使用它。

version: 3
services:
  myapp1:
    build: .
    ports: ['3000:3000']
    environment:
      MYAPP2_URL: 'http://myapp2/'
      STANDALONE_URL: 'http://standalone_service/'
    # gets `command:` from the Dockerfile
    # attaches to the `default` network
networks:
  default:
    external: true
    name: container_network

如果您不介意以相反的顺序并根据实现细节来启动,您还可以“借用” Docker Compose创建的默认default网络。

docker-compose up -d
docker run --net dirname_default -p 8888:8888 --name standalone_service ...

没有诸如“连接到外部localhost网络”之类的东西。每个网络环境(主机,以及每个容器)分别具有自己的“本地网络” 127.0.0.0/8; localhost固定为IP地址127.0.0.1,始终表示“我”;在Docker上下文中,“特别是我从中调用的容器”。