如何在DOCKERFILE中使用变量

时间:2017-11-13 19:18:17

标签: docker

我正在创建NGINX容器。我想将所有日志写入已装入的卷而不是默认卷。这可以通过将access_log和error_log指向已安装卷中的文件夹来更新nginx.conf文件来实现。我希望每个容器都能写入已安装卷中的容器特定文件夹。

例如: 容器图片名称:mycontainerapp 装载量:/logdirectory 然后我想: /var/log指向/logdirectory/mycontainerapp/{containerID}/log

这样,我可以让多个容器登录到公共安装卷。

AFAIK,我可以从/ proc / 1 / cpuset获取容器ID 我不确定是否有任何其他方式来获取容器ID

问题是,如何使用DOCKERFILE读取该容器ID并使用它来创建已装入的卷(带文件夹名称)?

此外,如果有更好的方法来实现我想要实现的目标,请告诉我,因为我是码头工的新手。

1 个答案:

答案 0 :(得分:0)

Docker包含logging drivers,可从等式中删除标准日志文件。发送到stdoutstderr的所有数据都将由Dockers日志记录界面捕获。

有许多send the access log stdout or /dev/fd/1 and send the error log to stderr or /dev/fd/2可以将日志从Docker主机发送到中央日志记录服务(Graylog,Syslog,AWS CloudWatch,ETW,Fluentd,Google Cloud,Splunk)。 json驱动程序是本地存储在Docker主机上的默认驱动程序。 journald也将在本地存储和访问。

在nginx配置或任何容器中,meta data can be attached to logs

daemon off;
error_log /dev/fd/2 info;

http {
  access_log /dev/fd/1;
  ...
}

一旦开始将此概念应用于所有容器,就会从容器/应用程序级别删除任何日志管理要求并将其推送到主机。容器{{3}}。移动或更改日志记录机制变得更加容易。迁移到像Swarm这样的集群设置变得不那么麻烦了。这一切都与Docker推动的每个容器的每个进程联系起来。