ComputeEngine에서 CoreOS를 선택하면 시작 스크립트에서 docker가 보이지 않습니다.
개요
Google Compute Engine에서 CoreOS 이미지 (coreos-stable-1298-7-0-v20170401)를 사용하여 인스턴스를 만들면 시작 스크립트에서 docker 명령을 사용할 수 없다고 생각합니다.
Apr 21 12:20:59 xxx.internal rkt[1110]: + /usr/bin/google_metadata_script_runner --script-type startup
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO Starting startup scripts.
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO Found startup-script in metadata.
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO startup-script: /tmp/startup-qconLt/tmpI9QQlX: line 29: /usr/bin/docker: No such file or directory
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO startup-script: /tmp/startup-qconLt/tmpI9QQlX: line 33: /usr/bin/docker: No such file or directory
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO startup-script: Return code 1.
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO Finished running startup scripts.
어쩔 수 없기 때문에 Ignition 경유로 docker.service에 의존하는 서비스로서 스타트 업 스크립트를 보내기로 했다. (원래 여기가 본래의 사용법일지도 모르지만···)
Ignition
Ignition은 cloud-init과 같이 시작 설정을 단순화하는 도구로 cloud-init와 달리 설정을 JSON 형식으로 전달합니다. Compute Engine의 경우이 설정을 user-data라는 메타 데이터를 통해 전달할 수 있습니다 (참고 : Ignition Config)
설정 예는 이 근처에 있지만, 이번에는 시작 스크립트 용 Systemd 서비스 Unit을 정의 할 수 있으면 좋으므로,
user-data{
"ignition": { "version": "2.0.0" },
"systemd": {
"units": [{
"name": "example.service",
"enable": true,
"contents": "[Service]\nType=oneshot\nExecStart=/usr/bin/echo Hello World\n\n[Install]\nWantedBy=multi-user.target"
}]
}
}
이 설정을 편집하고 사용합니다.
units는 등록하려는 Systemd 서비스의 Unit을 배열로 지정합니다. 각 Unit의 설정은 name, enable, contents의 3개의 속성을 가지는 객체로 되어 있으며, 각 속성은 각각 서비스명, enable로 하는지, unit 파일의 내용을 나타내고 있다.
시작 스크립트용 서비스 Unit
Docker가 시작된 후에 실행되도록하십시오.
startup.service[Unit]
Description=Startup Script
Requires=docker.service
After=docker.service
[Service]
ExecStartPre=-/usr/bin/docker stop myservice
ExecStartPre=-/usr/bin/docker rm myservice
ExecStart=/usr/bin/docker run --name myservice jkawamoto/myservice
ExecStop=/usr/bin/docker stop myservice
Restart=always
Type=simple
[Install]
WantedBy=multi-user.target
(참고: docker 컨테이너를 systemd로 관리 )
이 unit 파일을 등록하기위한 Ignition config 파일은 다음과 같습니다.
user-data{
"ignition": { "version": "2.0.0" },
"systemd": {
"units": [{
"name": "startup.service",
"enable": true,
"contents": "[Unit]\nDescription=Startup Script\nRequires=docker.service\nAfter=docker.service\n[Service]\nExecStartPre=-/usr/bin/docker stop myservice\nExecStartPre=-/usr/bin/docker rm myservice\nExecStart=/usr/bin/docker run --name myservice jkawamoto/myservice\nExecStop=/usr/bin/docker stop myservice\nRestart=always\nType=simple\n[Install]\nWantedBy=multi-user.target"
}]
}
}
그런 다음 텍스트 데이터를 user-data라는 메타 데이터로 전달하면됩니다.
Reference
이 문제에 관하여(ComputeEngine에서 CoreOS를 선택하면 시작 스크립트에서 docker가 보이지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jkawamoto/items/7d5e0684130d8773b657
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Apr 21 12:20:59 xxx.internal rkt[1110]: + /usr/bin/google_metadata_script_runner --script-type startup
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO Starting startup scripts.
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO Found startup-script in metadata.
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO startup-script: /tmp/startup-qconLt/tmpI9QQlX: line 29: /usr/bin/docker: No such file or directory
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO startup-script: /tmp/startup-qconLt/tmpI9QQlX: line 33: /usr/bin/docker: No such file or directory
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO startup-script: Return code 1.
Apr 21 12:20:59 xxx.internal startup-script[1361]: INFO Finished running startup scripts.
Ignition은 cloud-init과 같이 시작 설정을 단순화하는 도구로 cloud-init와 달리 설정을 JSON 형식으로 전달합니다. Compute Engine의 경우이 설정을 user-data라는 메타 데이터를 통해 전달할 수 있습니다 (참고 : Ignition Config)
설정 예는 이 근처에 있지만, 이번에는 시작 스크립트 용 Systemd 서비스 Unit을 정의 할 수 있으면 좋으므로,
user-data
{
"ignition": { "version": "2.0.0" },
"systemd": {
"units": [{
"name": "example.service",
"enable": true,
"contents": "[Service]\nType=oneshot\nExecStart=/usr/bin/echo Hello World\n\n[Install]\nWantedBy=multi-user.target"
}]
}
}
이 설정을 편집하고 사용합니다.
units는 등록하려는 Systemd 서비스의 Unit을 배열로 지정합니다. 각 Unit의 설정은 name, enable, contents의 3개의 속성을 가지는 객체로 되어 있으며, 각 속성은 각각 서비스명, enable로 하는지, unit 파일의 내용을 나타내고 있다.
시작 스크립트용 서비스 Unit
Docker가 시작된 후에 실행되도록하십시오.
startup.service[Unit]
Description=Startup Script
Requires=docker.service
After=docker.service
[Service]
ExecStartPre=-/usr/bin/docker stop myservice
ExecStartPre=-/usr/bin/docker rm myservice
ExecStart=/usr/bin/docker run --name myservice jkawamoto/myservice
ExecStop=/usr/bin/docker stop myservice
Restart=always
Type=simple
[Install]
WantedBy=multi-user.target
(참고: docker 컨테이너를 systemd로 관리 )
이 unit 파일을 등록하기위한 Ignition config 파일은 다음과 같습니다.
user-data{
"ignition": { "version": "2.0.0" },
"systemd": {
"units": [{
"name": "startup.service",
"enable": true,
"contents": "[Unit]\nDescription=Startup Script\nRequires=docker.service\nAfter=docker.service\n[Service]\nExecStartPre=-/usr/bin/docker stop myservice\nExecStartPre=-/usr/bin/docker rm myservice\nExecStart=/usr/bin/docker run --name myservice jkawamoto/myservice\nExecStop=/usr/bin/docker stop myservice\nRestart=always\nType=simple\n[Install]\nWantedBy=multi-user.target"
}]
}
}
그런 다음 텍스트 데이터를 user-data라는 메타 데이터로 전달하면됩니다.
Reference
이 문제에 관하여(ComputeEngine에서 CoreOS를 선택하면 시작 스크립트에서 docker가 보이지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jkawamoto/items/7d5e0684130d8773b657
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[Unit]
Description=Startup Script
Requires=docker.service
After=docker.service
[Service]
ExecStartPre=-/usr/bin/docker stop myservice
ExecStartPre=-/usr/bin/docker rm myservice
ExecStart=/usr/bin/docker run --name myservice jkawamoto/myservice
ExecStop=/usr/bin/docker stop myservice
Restart=always
Type=simple
[Install]
WantedBy=multi-user.target
{
"ignition": { "version": "2.0.0" },
"systemd": {
"units": [{
"name": "startup.service",
"enable": true,
"contents": "[Unit]\nDescription=Startup Script\nRequires=docker.service\nAfter=docker.service\n[Service]\nExecStartPre=-/usr/bin/docker stop myservice\nExecStartPre=-/usr/bin/docker rm myservice\nExecStart=/usr/bin/docker run --name myservice jkawamoto/myservice\nExecStop=/usr/bin/docker stop myservice\nRestart=always\nType=simple\n[Install]\nWantedBy=multi-user.target"
}]
}
}
Reference
이 문제에 관하여(ComputeEngine에서 CoreOS를 선택하면 시작 스크립트에서 docker가 보이지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jkawamoto/items/7d5e0684130d8773b657텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)