我正在尝试获取启动脚本(系统服务)为了docker-compose containers
。
我正在努力让它发挥作用,并做出了一次又一次的改变;有些事情有效,而其他事情没有按预期工作,具体来说是如何环境变量使用 systemd 配置。
# named `dc-mag235.service`
[Unit]
Description=Magento 2.3.5 Docker-Compose Containers
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=/var/www/docker/_systemd.startups_/mag2.35.env.file
#PassEnvironment=$DCFOLDER
Type=simple
TimeoutStartSec=0
Restart=always
WorkingDirectory=${DCFOLDER}
ExecStartPre=mkdir -p ${LOGFOLDER}
ExecStartPre=echo ${DCFOLDER}
ExecStartPre=echo Starting Docker-compose service for ${DESCRIPTION}...
ExecStart=/usr/local/bin/docker-compose start
ExecReload=/usr/local/bin/docker-compose restart
ExecStop=/usr/local/bin/docker-compose stop
[Install]
WantedBy=multi-user.target
DESCRIPTION=Magento 2.3.5 Docker-Compose Containers
LOGFOLDER=/var/www/docker/_initlogs_
LOGFILE=$LOGFOLDER/dc-mag235.startup.log
DCFOLDER=/var/www/docker/magento2-docker-full-supervisord-expanded/release-magento2.35
尝试WorkingDirectory
与变量一起使用$DCFOLDER
:
当我删除时PassEnvironment
我收到这里提到的相同错误:
sudo service dc-mag235 status
/etc/systemd/system/dc-glo-mag235.service:8: Invalid environment name for PassEnvironment, ignoring: $DCFOLDER
Apr 22 12:32:20 glo020-truservcomm-jhb1-001 systemd[1]: /etc/systemd/system/dc-glo-mag235.service:12: WorkingDirectory= path is not absolute: ${DCFOLDER}
尝试使用cd $DCFOLDER && docker-compose restart
asExecStart
命令而不是WorkingDirectory
:
Executable "cd" not found in path "/usr/local/sbin:/usr/local/bin:/usr/sbin:
请注意:
当我禁用WorkingDirectory
然后使用 时cd
,在检查回声时,/var/log/syslog
回声ExecStartPre
实际上给了我这些变量(路径)的值,因为它们应该是。所以ExecStartPre
执行得很好。
问题
我有定制
docker-compose.yml.*
正在运行的自定义文件现存的容器,需要重新启动/停止/启动。自从docker-compose
我要使用的服务命令要求您在目录里面docker-compose.yml
在所在,我需要能够使用cd
orWorkingDirectory
以便我可以直接使用docker-compose start
。我有几个正在运行的不同 docker-compose 容器集(不同文件夹)的实例,所以我想创建一个“模板 systemd”文件,我可以只指定位置
EnvironmentFile
。
换句话说 :
Example = each of these have their own Docker containers... so I want to create different systemd services for these:
/docker/folder/docker-compose.yml
/docker/folder2/docker-compose.yml
问题
我在这里有几个问题:
能
WorkingDirectory
与“环境变量”一起使用以及如何使用?可以看出我尝试了 PassEnvironment但带有环境文件。看来我不太明白执行systemd
设置环境的时间WorkingDirectory
。看起来所有这些“服务”命令都需要静态常量值......'cd' not found in path
- 这个很奇怪,因为我以为我可以简单地改变目录到工作目录(文件docker-compose.yml
所在的位置,以便我可以运行docker-compose start/restart/stop
.实际用途是什么
PassEnvironment
?最后 - 尝试
$(which docker-compose) ps
作为一个例子失败了,因为WorkingDirectory
它似乎又期待一个“恒定值”。我本来想使用$(which docker-compose)
而不是静态位置。
答案1
有时可能就像这样简单
ExecStart=/bin/bash -c "cd \"/path/${variable_subpath}/\";echo \"${PWD}\";"
并WorkingDirectory
完全跳过。在大多数情况下,如果它是简单的命令或脚本,您只能摆脱这种黑客方法。