systemd和Docker究竟要相殺多久?

systemd和Docker究竟要相殺多久?

systemd和Docker有沒有相愛過?Lennart Poettering(Redhat systemd的核心開發)和Solomon Hykes(Docker創始人CTO)應該都不願去回答這個問題。

可是對於剛剛入門Docker的小Pa我來說,我是多麼希望他們可以停止相殺,至少可以彼此接納融合。

小Pa最近做的項目里遇到的一個小麻煩:Docker里起了容器,需要將Docker主機的網卡用命名空間的映射的方式傳進容器,但是這個需要依賴容器的PID:

pid=$(docker inspect --format {{.State.Pid}} $name) name為容器名稱ip link set eth0 netns $pid

一旦容器重啟,這個PID也會更改,那就需要在Docker主機起個進程去做網路重新映射。

小Pa一開始天真地以為,Docker這麼NB應該有機制可以解決這個問題。結果,

小Pa拚命瞪大眼睛仔細讀了Docker的文檔 Start containers automatically,也沒發現Docker自身有這樣的配置,就看到這麼一句:

If restart policies don』t suit your needs, such as when processes outside Docker depend on Docker containers, you can use a process manager such as upstart,systemd, or supervisor instead.

systemd里service文件可以指定配置進程的前後和依賴,但是痛點就在於,怎麼動態地Fork容器呢?

這麼難的問題,小Pa是空想不出來的,那麼問了谷歌之後,發現Redhat早就有工程師去試圖解決這一難題就是rhatdan/oci-systemd-hook,多可喜的發現啊!可是這個鉤子僅僅存在於Redhat的Docker版本,對於Docker的社區版本是沒有接納這些patch。

可是,我們的產品不能用Docker Redhat版本,那麼苦逼的小Pa剛有一線希望,就又一下子跌落谷底,當然現在的方案就是自己寫daemon去監測容器並且相應地配置網路。

小Pa大晚上的堆這豆腐塊,就是想在這吐槽:

Docker要麼NB得開發一套架構徹底替代systemd,要麼有一顆寬容的心接納systemd的patch,停止相殺。

P.S. 今天小朋友們要高考了,高考只是人生的一場考驗,會影響人生,但是主宰不了人的一生。

推薦閱讀:

使用Heapster和Splunk監控Kubernetes運行性能
如何使用 Spinnaker 和 Kubernetes 進行資料庫變更發布?
Kubernetes中的用戶與身份認證授權
Kubernetes 為什麼這麼重要?

TAG:Kubernetes | Docker | OpenStack |