如何在DOCKERFILE中使用variables

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

例如:容器映像名称: mycontainerapp挂载的卷: /logdirectory然后我想要: /var/log指向/logdirectory/mycontainerapp/{containerID}/log

这样,我可以有多个容器login到普通安装的卷。

AFAIK,我可以从/ proc / 1 / cpuset获取容器ID我不知道任何其他方式来获取容器ID

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

另外,如果有更好的方法来实现我的目标,请让我知道,因为我是docker工的新手。

Docker有一个日志logging机制 ,从等式中删除标准的日志文件。 发送到stdoutstderr所有数据都将被Dockers日志logging界面捕获。

有许多日志logging驱动程序可以将日志从Docker主机发送到中央日志logging服务(Graylog,Syslog,AWS CloudWatch,ETW,Fluentd,Google Cloud,Splunk)。 json驱动程序是本地存储在Docker主机上的默认驱动程序。 journald也将在本地存储和访问。

在nginx config或任何容器中, 发送访问日志stdout/dev/fd/1并将错误日志发送到stderr/dev/fd/2

 daemon off; error_log /dev/fd/2 info; http { access_log /dev/fd/1; ... } 

一旦开始将这个概念应用于所有的容器,任何日志pipe理需求都将从容器/应用程序级别中移除并推送给主机。 容器元数据可以附加到日志 。 移动或更改日志logging机制变得更容易。 移动到像Swarm这样的集群设置变得不那么麻烦。 这一切都与Docker推动的每个容器理念关联起来。