dockerized app需要通过localhost与其他docker进行交互

时间:2018-05-21 17:14:46

标签: docker localhost docker-networking

我有一个应用程序可以启动一个docker容器并自动执行一些例程。 现在我已将这个应用程序停靠,这个应用程序无法通过localhost与其他容器通信。我尝试过设置      - 网络主机 启动容器时,现在无法通过localhost访问容器化的webapp:

任何指针?

3 个答案:

答案 0 :(得分:1)

localhost无效。假设您正在运行VM并尝试与计算机中运行的主机/其他VM通信。如果从其中一个VM调用localhost,则它仅为该VM的localhost,而不是您的主机。因此,您将无法通过调用localhost从一个VM与另一个VM进行通信。 Docker在localhost方面的工作方式相同。你有两个选择,

  1. 使用网络 如果您使用的是网络,请创建网络并将所有容器添加到该网络。这是docker新建议的方式。

    docker network create <your-network-name>
    docker run --network <your-network-name> --name <container-name1> <image>
    docker run --network <your-network-name> --name <container-name2> <image>
    

    然后使用容器名称(container-name1)与来自其他服务(container-name2)的该服务进行通信。

  2. 使用--link选项

  3. 或者你可以使用--link选项,这是docker的遗留系统。 Docker文档说,除非您有特定的理由使用,否则不要再使用--link

    docker run --name <container1> <image>
    docker run --name <container2> <image>
    

    您可以使用container1container2对话,反之亦然。您可以在数据库主机等地方使用这些容器名称

答案 1 :(得分:0)

您是否尝试创建公共网桥并将容器连接到同一网络:

创建网络: - docker network create networkname

然后在docker run命令中添加此开关--network = networkname

答案 2 :(得分:0)

我在浏览了很多其他文件之后想到了它。

步骤1:在容器内安装docker。在我的dockerfile中添加了以下行

RUN curl -sSL https://get.docker.com/ | sh

步骤2:在docker run命令

中提供卷映射
-v /var/run/docker.sock:/var/run/docker.sock

现在可以从我当前的容器中访问主机的docker命令,而无需更改当前docker容器的--network,我可以通过localhost访问其他容器