Skip to content

Latest commit

ย 

History

History
167 lines (107 loc) ยท 4.81 KB

cmd_run_on_host_from_container.md

File metadata and controls

167 lines (107 loc) ยท 4.81 KB

๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ˜ธ์ŠคํŠธ์— ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ถœ์ฒ˜์˜ ๋‚ด์šฉ์„ ํ•œ๊ธ€๋กœ ๋ฒˆ์—ญํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : https://stackoverflow.com/questions/32163955/how-to-run-shell-script-on-host-from-docker-container


๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ˜ธ์ŠคํŠธ์— ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ˜ธ์ŠคํŠธ๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค.

๋„ค์ž„๋“œ ํŒŒ์ดํ”„(Named Pipe, ๋ช…๋ช…๋œ ํŒŒ์ดํ”„)๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์™€ ํ˜ธ์ŠคํŠธ ๊ฐ„ ํ†ต์‹ ์„ ํ•˜์—ฌ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋‹ค.

ํŒŒ์ดํ”„๋ž€ ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ ์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

๋ฐฉ๋ฒ•

1. ํ˜ธ์ŠคํŠธ์—์„œ ํŒŒ์ดํ”„ ์ƒ์„ฑํ•ด๋ณด๊ธฐ

ํ˜ธ์ŠคํŠธ์—์„œ, named pipe๋ฅผ ์›ํ•˜๋Š” ์œ„์น˜์— ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑํ•œ๋‹ค.

mkfifo /path/to/pipe/mypipe

Type์ด p์ธ ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

ls -l /path/to/pipe/mypipe
prw-r--r-- 1 root root 0  5์›” 18 15:08 /path/to/pipe/mypipe

ํ„ฐ๋ฏธ๋„์„ 2๊ฐœ ์—ด์–ด์„œ, ํŒŒ์ดํ”„๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ /์†ก์‹  ํ•ด๋ณด์ž.

ํ„ฐ๋ฏธ๋„ 1์—์„œ ํŒŒ์ดํ”„์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๋„๋ก ํ•œ๋‹ค.

# ํ„ฐ๋ฏธ๋„ 1
tail -f /path/to/pipe/mypipe

ํ„ฐ๋ฏธ๋„ 2์—์„œ ํŒŒ์ดํ”„๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์†ก์‹ ํ•œ๋‹ค.

# ํ„ฐ๋ฏธ๋„ 2
echo "hello world!" > /path/to/pipe/mypipe

ํ„ฐ๋ฏธ๋„ 1์—์„œ "hello world!" ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

Ctrl + C๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

2. ์ƒ์„ฑํ•œ ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด ๋ช…๋ น์–ด ์ˆ˜ํ–‰ํ•ด๋ณด๊ธฐ

ํ„ฐ๋ฏธ๋„ 1์—์„œ tail -f ๋Œ€์‹  ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ํŒŒ์ดํ”„์—์„œ ์ฝ์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.

# ํ„ฐ๋ฏธ๋„ 1
eval "$(cat /path/to/pipe/mypipe)"

ํ„ฐ๋ฏธ๋„ 2์—์„œ ls -l ๋ช…๋ น์–ด๋ฅผ ํŒŒ์ดํ”„๋กœ ์†ก์‹ ํ•œ๋‹ค.

# ํ„ฐ๋ฏธ๋„ 2
echo "ls -l" > /path/to/pipe/mypipe

ํ„ฐ๋ฏธ๋„ 1์—์„œ ls -l ๋ช…๋ น์–ด์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

3. ํ˜ธ์ŠคํŠธ์—์„œ ํŒŒ์ดํ”„๋ฅผ ๊ณ„์† ์ฝ๋„๋ก ํ•˜๊ธฐ

2๋ฒˆ ๋ฐฉ๋ฒ•์—์„  ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜์‹ ํ•œ ๋’ค ๋ฉˆ์ถ”๊ธฐ ๋•Œ๋ฌธ์—, ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๊ณ„์† ์ˆ˜์‹ ํ•˜๊ฒŒ ํ•œ๋‹ค.

# ํ„ฐ๋ฏธ๋„ 1
while true; do eval "$(cat /path/to/pipe/mypipe)"; done

์ด์ œ ํ„ฐ๋ฏธ๋„ 2์—์„œ ํŒŒ์ดํ”„๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ช…๋ น์–ด๋ฅผ ์†ก์‹ ํ•ด๋„ ์ฒ˜์Œ ์ˆ˜์‹  ํ›„ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๊ณ„์†ํ•ด์„œ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜์‹ ๋ฐ›๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.

Ctrl + C๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

4. reboot ์‹œ์—๋„ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•˜๊ธฐ

์•„๋ž˜ ๋‚ด์šฉ์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

#!/bin/bash
while true; do eval "$(cat /path/to/pipe/mypipe)"; done

๋งŒ์•ฝ ํŒŒ์ดํ”„๋กœ ์ „์†ก๋œ ๋ฉ”์‹œ์ง€ ์ˆ˜ํ–‰ํ•œ ๊ธฐ๋ก์„ ํŒŒ์ผ๋กœ ๋‚จ๊ธฐ๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ ๋‚ด์šฉ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

#!/bin/bash
while true; do eval "$(cat /path/to/pipe/mypipe)" &> /somepath/output.txt; done
# /somepath/output.txt ํŒŒ์ผ์— ๊ธฐ๋ก์ด ๋‚จ๋Š”๋‹ค.
# &>> ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ๋’ค์— ๋ถ™์—ฌ์“ด๋‹ค.

์ž‘์„ฑํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ chmod +x ๋กœ ์‹คํ–‰๊ถŒํ•œ์„ ์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  crontab์— reboot ์‹œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ์ถ”๊ฐ€ํ•œ๋‹ค.

crontab -e
# ์•„๋ž˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€
@reboot /path/to/pipe/exec_pipe.sh

5. ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ˜ธ์ŠคํŠธ์˜ ํŒŒ์ดํ”„ ๋งˆ์šดํŠธํ•˜๊ธฐ(VOLUME)

dockerfile ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ์ƒ์„ฑํ•œ ํŒŒ์ดํ”„ ํŒŒ์ผ์„ ๋งˆ์šดํŠธํ•˜๋„๋ก volumn์„ ์„ค์ •ํ•œ๋‹ค.

ํ˜ธ์ŠคํŠธ์˜ /path/to/pipe ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ /hostpipe ๋””๋ ‰ํ† ๋ฆฌ์— ๋งˆ์šดํŠธํ•œ๋‹ค.

# dockerfile ์—์„œ ์„ค์ •
volumes:
   - /path/to/pipe:/hostpipe
# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์„ค์ •
docker run test -d --name <container> -v /path/to/pipe:/hostpipe ubuntu:20.04 bash

6. ์ปจํ…Œ์ด๋„ˆ์—์„œ ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด ํ˜ธ์ŠคํŠธ์—์„œ ๋ช…๋ น์–ด ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๊ธฐ

์ปจํ…Œ์ด๋„ˆ์— ์ ‘์†ํ•ด์„œ ํŒŒ์ดํ”„์— ๋ช…๋ น์–ด๋ฅผ ์†ก์‹ ํ•ด๋ณด์ž.

์ปจํ…Œ์ด๋„ˆ์— ์ ‘์†ํ•œ๋‹ค.

docker exec -it <container> bash

์ปจํ…Œ์ด๋„ˆ์— ํ˜ธ์ŠคํŠธ์˜ ํŒŒ์ดํ”„๊ฐ€ ๋งˆ์šดํŠธ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

cd /hostpipe && ls -l

์ปจํ…Œ์ด๋„ˆ์—์„œ ํŒŒ์ดํ”„๋กœ ๋ช…๋ น์–ด๋ฅผ ์†ก์‹ ํ•œ๋‹ค.

echo "touch this_file_was_created_on_main_host_from_a_container.txt" > /hostpipe/mypipe

ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด this_file_was_created_on_main_host_from_a_container.txt ํŒŒ์ผ์ด ํ˜ธ์ŠคํŠธ์— ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ํ™•์ธํ•ด๋ณด์ž.

์ฃผ์˜์‚ฌํ•ญ

๋ฆฌ๋ˆ…์Šค host, ๋ฆฌ๋ˆ…์Šค container์—์„œ ์ •์ƒ ์ž‘๋™ํ•œ๋‹ค.

macOS ๋˜๋Š” Windows ๊ธฐ๋ฐ˜์˜ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ •์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.