docker在dockerfile和docker-compose.yml中使用通用配置

时间:2018-10-17 20:30:42

标签: docker docker-compose dockerfile

我正在使用许多docker容器。我想为其中一个分配一个静态ip,然后在另一个dockerfile中使用该静态ip。
我想使用某种配置文件,例如.env文件,并在dockerfiledocker-compose.yml中使用它。

2 个答案:

答案 0 :(得分:1)

我想办法。简单地:

  1. 将配置添加到.env文件,例如ip_server=172.20.0.2
  2. .env中使用docker-compose.yml变量,并将其作为参数传递给docker image,例如:

    services:
      client
      build:
        context: ./client
        args:
          - IP_SERVER=${ip_server}

  1. 然后像这样在dockerfile中使用它

    ARG IP_SERVER
    ENV IP_SERVER=${IP_SERVER}


参考文献:
 -docker-compose env file
 -docker-compose args
 -dockerfile env

答案 1 :(得分:1)

您可能不想做任何一件事情。

如果您在同一Docker Compose设置中运行两个容器,则Compose将为您创建一个私有Docker网络,一个容器可以使用其容器名称(或{{1中的块名称}})作为主机名。那应该消除对静态IP地址的需要。

第二,像这样对主机名或IP地址进行硬编码会使重用设置变得更加困难。作为一个非常基本的示例,在Docker外部进行开发时,您可以在同一主机上运行客户端和服务器,并使用docker-compose.yml作为主机名,但是在Docker Compose设置中,它们将位于不同的容器中并且使用不同的容器主机名。这也意味着您永远无法将映像localhost到注册表中,这在某些常见的部署方案中是必需的。环境变量是从外部传递此变量的常用方法。

完成此操作的docker push可能看起来像:

docker-compose.yml