我有一个应用程序可以启动一个docker容器并自动执行一些例程。 现在我已将这个应用程序停靠,这个应用程序无法通过localhost与其他容器通信。我尝试过设置 - 网络主机 启动容器时,现在无法通过localhost访问容器化的webapp:
任何指针?
答案 0 :(得分:1)
localhost
无效。假设您正在运行VM并尝试与计算机中运行的主机/其他VM通信。如果从其中一个VM调用localhost,则它仅为该VM的localhost,而不是您的主机。因此,您将无法通过调用localhost从一个VM与另一个VM进行通信。 Docker在localhost方面的工作方式相同。你有两个选择,
使用网络 如果您使用的是网络,请创建网络并将所有容器添加到该网络。这是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)的该服务进行通信。
使用--link
选项
或者你可以使用--link
选项,这是docker的遗留系统。 Docker文档说,除非您有特定的理由使用,否则不要再使用--link
。
docker run --name <container1> <image>
docker run --name <container2> <image>
您可以使用container1
与container2
对话,反之亦然。您可以在数据库主机等地方使用这些容器名称
答案 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访问其他容器