내 서비스를 위해 여러 컨테이너를 시작하는 docker-compose 파일이 있습니다. 이러한 컨테이너 중 하나에는 환경 변수 세트(정확하게는 서버의 공용 IP)가 있어야 합니다. 운영 체제는 새로 설치된 Ubuntu 15.10 Server 가상 머신입니다.
나는 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
그러나 systemd를 사용하면 systemd-analyze verify myapp.service
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'/')`
또한 upstart에서 했던 것처럼 docker-compose 명령( ) 바로 앞에 변수 할당을 시도했지만 MY_MASTER_IP=blah blah blah /docker-compose yadda yadda
systemd는 이를 더욱 좋아하지 않았습니다.
그럼 환경선을 이렇게 사용해도 될까요? 그렇지 않다면 이를 처리하는 가장 좋고/가장 우아하고/가장 쉬운 방법은 무엇입니까?
답변1
아니요, systemd 장치는 쉘 스크립트가 아니며 명령 대체를 지원하지 않기 때문입니다. 이는 의도적인 디자인 결정입니다.