我正在尝试使用 systemd 单元文件执行 logspout 容器。理想情况下,logspout 容器应获取 EC2 实例主机名的环境值,SYSLOG_HOSTNAME
但它获取的是 localhost 作为主机名。
After=systemd-hostnamed.service
ExecStart=/usr/bin/docker run --name logspout --hostname logspout \
--env SYSLOG_HOSTNAME=%H \
--env SYSLOG_TAG=latest \
--env INACTIVITY_TIMEOUT=1m \
gliderlabs/logspout:latest
我也曾尝试运行这项服务systemd-hostnamed.service
,但效果不太好。
答案1
用双引号将 %H 括起来。%H -> "%H" 请参阅此处的原始文档https://www.freedesktop.org/software/systemd/man/systemd.unit.html
答案2
我通过创建如下所示的 systemd 单元服务来实现此目的,该服务主要负责从 ec2 元数据服务中获取主机名。
systemd:
units:
- name: metadata.service
contents: |
[Unit]
Description=EC2 metadata agent
Requires=docker.socket
After=docker.socket
[Service]
Type=oneshot
Environment=OUTPUT=/run/metadata/ec2
ExecStart=/usr/bin/mkdir --parent /run/metadata
ExecStart=/usr/bin/bash -c 'echo "CUSTOM_EC2_IPV4_LOCAL=$(curl\
--silent --url http://169.254.169.254/2009-04-04/meta-data/local-ipv4\
--retry 10)" > $${OUTPUT}'