Kev*_*ner 4 environment-variables systemd
我有一个 docker-compose 文件,用于为我的服务启动多个容器。其中一个容器需要设置一个环境变量(准确地说是服务器的公共 ip)。操作系统是新安装的 Ubuntu 15.10 服务器虚拟机。
我正在尝试找到一种方法来为 systemd 提供此功能。到目前为止,我想出的最好的是:
[Unit]
Description=service for my product
Requires=docker.service
After=docker.service
[Service]
Environment=MY_MASTER_IP=`/sbin/ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'`
Environment=MY_NETWORK_NAME="mynetwork"
Restart=always
ExecStart=/usr/local/bin/docker-compose -f /app/master/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /app/master/docker-compose.yml stop
[Install]
WantedBy=local.target
Run Code Online (Sandbox Code Playgroud)
但是,当我使用systemd-analyze verify myapp.service
systemd 时,它会通过告诉我带有 crazy shell 命令的行无效并将被忽略来做出响应。
[/lib/systemd/system/myapp.service:8] Invalid environment assignment, ignoring: MY_MASTER_IP=`/sbin/ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')`
Run Code Online (Sandbox Code Playgroud)
我还尝试将变量赋值直接放在 docker-compose 命令 ( MY_MASTER_IP=blah blah blah /docker-compose yadda yadda
) 之前,就像我对 upstart 所做的那样,但 systemd 更不喜欢这个。
那么环境线可以这样使用吗,如果不是,处理这个问题的最好/最优雅/最简单的方法是什么?
小智 6
不,因为 systemd 单元不是 shell 脚本,也没有命令替换支持。这是一个有意的设计决定。
归档时间: |
|
查看次数: |
4354 次 |
最近记录: |