시작 스크립트를 얻으려고 합니다(시스템 서비스)을 위한 docker-compose containers
.
나는 그것이 작동하도록 노력하고 있으며 변경 후 변경을 시도하고 있습니다. 어떤 것들은 작동하고 다른 것들은 예상대로 작동하지 않습니다.환경 변수시스템 구성을 사용하십시오.
# 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
as 명령을 사용해 보세요 .ExecStart
WorkingDirectory
Executable "cd" not found in path "/usr/local/sbin:/usr/local/bin:/usr/sbin:
참고:
비활성화 WorkingDirectory
한 다음 를 사용하면 cd
echo를 확인할 때 /var/log/syslog
echo는 ExecStartPre
실제로 이러한 변수(경로)의 값을 원래대로 제공합니다. 너무 ExecStartPre
잘 실행되었습니다.
질문
docker-compose.yml.*
실행 중인 사용자 정의 파일이 있습니다.기존의컨테이너를 다시 시작/중지/시작해야 합니다.docker-compose
제가 사용하고 싶은 서비스 명령어가 물어보시 니까docker-compose.yml
해당 디렉토리에cd
, orWorkingDirectory
을 직접 사용할 수 있도록 해야 합니다docker-compose start
.다양한 docker-compose 컨테이너 세트(다른 폴더)의 실행 중인 인스턴스가 여러 개 있으므로 위치를 지정할 수 있는 "템플릿 시스템" 파일을 만들고 싶습니다
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
완전히 건너뛰세요. 대부분의 경우 간단한 명령이나 스크립트인 경우에만 이 해킹을 피할 수 있습니다.