【问题标题】:Docker --add-host and Docker composeDocker --add-host 和 Docker 组合
【发布时间】:2018-10-14 13:48:26
【问题描述】:

我有 2 个容器:PL 和 SL,它们都在同一个主机上(我的电脑 - Windows)。 这两个容器都是从 Linux 映像创建的。

这些容器应该相互连接:

在 PL 容器内有一个配置文件(在“volume”中),我在其中插入了字符串:sl_url

这就是我创建 PL 容器的方式:

docker run -d -p 8084:8080 -p 8008:8009 -v C:\temp\conf:/opt/tomcat/conf --add-host="sl-url:<my_host_IP_address>" --platform=linux <pl_image_name>

如您所见,sl-url 被翻译为我的 ip。 但这不是一个好的解决方案——因为我的 ip 可能会改变。

所以我听说了 docker compose (https://docs.docker.com/compose/networking/), 我怎么能用 docker compose 来做呢? 我想从图像创建一个容器,而不是每次都插入我的 IP。我只想插入主机名。

有可能吗?

【问题讨论】:

  • 为什么要问这么多问题?
  • 什么意思?

标签: docker docker-compose dockerfile


【解决方案1】:

我假设“应该相互连接”意味着您可以从容器SL 访问容器PL 中的应用程序,该应用程序绑定到一个端口,反之亦然。

您可以使用 docker compose 来实现。这是一个最小的docker-compose.yml

version: "3.5"
services:
  SL:
  image: SL                 # or whatever the full image name is
  container_name: sl
  networks:
    - my_network

  PL:
  image: PL                 # or whatever the full image name is
  container_name: sl
  networks:
    - my_network

networks:
  my_network:
    name: my_network
    driver: bridge

然后您应该能够使用简单的sl.my_network 从容器PL 访问容器SL。举个例子:

docker exec -it pl bash                         # with this command you enter container pl
ping sl.my_network

这假设您的容器已安装 bashping。您可以在容器内的任何配置中使用此 URI (sl.my_network)。 Docker DNS 会为你解析。

【讨论】:

  • 您好,感谢您的回复!你的意思是我应该在“my_network”字段中插入我的主机名吗?那么在 PL 的属性文件中显示的字符串“sl-url”代表 SL 服务器呢?我需要以某种方式将它放在 docker compose 文件中吗?谢谢,罗恩
  • 嗨,我的回答向您展示了如何从另一个容器 (pl) 到达一个容器 (sl),因为您说“这些容器应该相互连接:”。如果这是您想要做的,您不需要更改任何内容,但我怀疑--add-host="sl-url:&lt;my_host_IP_address&gt;" 的想法是通过网络从完全不同的计算机访问您的容器,例如互联网。您能否澄清一下,您到底想做什么?
  • 10x,我会澄清一下。我有一个带有 Tomcat(+war 文件)的 PL 容器。在这个容器内,我有一个属性文件 - sl.properties。在这个文件中,我有一些关于 PL 服务的配置。此文件还包含:services.url=sl-url:8085/core_sl_env4 - 此属性连接两个容器:PL 和 SL。这个 service.url 实际上是 SL url。这就是我添加到主机的原因:--add-host="sl-url:"。我在 sl.properties 文件中插入了字符串“sl-url”,但我可以在那里插入 my_host_IP_address,这是一样的,这就是我使用主机文件的原因
  • 顺便说一句,PL 和 SL 在同一个 docker 主机(我的机器)上。你有什么建议?再次感谢! :)
  • 如果您使用我发布的 docker-compose.yml,两个容器都将位于同一个 docker 网络 my_network 上(可以随意更改名称,但要始终如一地进行,即在所有地方)那么您的配置将简单地读取services.url=sl.my_network:8085/core_sl_env4 配置不需要知道您的主机IP
猜你喜欢
  • 2019-05-02
  • 1970-01-01
  • 2020-08-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多