簡體   English   中英

Docker容器內的碼頭工人

[英]docker inside docker container

我想在一個正在運行的docker容器中安裝docker。

docker run -it centos:centos7

我的基礎容器正在使用centos,我可以使用docker exec登錄到正在運行的容器。 但是當我嘗試使用yum install -y docker其中安裝yum install -y docker它會安裝。

但不知怎的,我無法用docker -d &啟動docker服務,它給了我錯誤:

INFO[0000] Option DefaultNetwork: bridge 
WARN[0000] Running modprobe bridge nf_nat br_netfilter failed with message: , error: exit status 1 
FATA[0000] Error starting daemon: Error initializing network controller: Error initializing bridge driver: Setup IP forwarding failed: open /proc/sys/net/ipv4/ip_forward: read-only file system

有沒有辦法我可以在docker容器中安裝docker或者構建已經運行docker的映像? 我已經看過這些例子,但沒有一個對我有用。

主機上uname -r的輸出:

[fedora@ ~]$ uname -r
4.2.6-200.fc22.x86_64

任何幫助,將不勝感激。

提前致謝

更新

感謝https://stackoverflow.com/a/38016704/372019我想展示另一種方法。

您應該復制或安裝docker二進制文件的特定於容器的版本,而不是安裝主機的docker二進制文件。 由於您僅在客戶端模式下使用它,因此您無需將其作為系統服務進行安裝。 您仍然需要將Docker套接字安裝到容器中,以便您可以輕松地與主機的Docker引擎進行通信。

假設你有一個帶有工作Docker二進制文件的基本圖像(例如官方的docker圖像 ),現在的例子如下:

docker run\\ -v /var/run/docker.sock:/var/run/docker.sock\\ docker:1.12 docker info


在沒有實際回答您的問題的情況下,我建議您閱讀使用Docker-in-Docker進行CI或測試環境? 三思而后行

它解釋了為什么運行docker-in-docker應該替換為Docker容器作為“外部”或“基礎”容器的兄弟節點運行的設置。 這篇文章還鏈接到原始的https://github.com/jpetazzo/dind項目,在那里你可以找到如何在Docker中運行Docker的工作示例 - 以防你仍然希望擁有docker-in-docker。

如何啟用容器來訪問主機的Docker守護程序的示例如下所示:

docker run\
  -v /var/run/docker.sock:/var/run/docker.sock\
  -v /usr/bin/docker:/usr/bin/docker\
  busybox:latest /usr/bin/docker info

如果您使用Docker工具箱在Mac上。

以下命令不起作用

docker run\
  -v /var/run/docker.sock:/var/run/docker.sock\
  -v /usr/bin/docker:/usr/bin/docker\
  busybox:latest /usr/bin/docker info

因為/var/run/docker.sock不在你的OSX文件系統上

Docker守護程序在boot2docker VM中運行 - 這就是unix套接字所在的位置。

所以你必須從boot2docker VM運行容器

$ docker-machine ssh default
$ docker run\ 
         -v /var/run/docker.sock:/var/run/docker.sock\ 
         -v $(which docker):/usr/bin/docker\ 
         busybox:latest /usr/bin/docker info
$ exit

這看起來像Docker-in-Docker,感覺就像Docker-in-Docker,但它不是Docker-in-Docker,當這個容器會創建更多容器時,這些容器將在頂級Docker中創建。

你需要--privileged參數。

默認情況下,Docker容器是“非特權”的,例如,不能在Docker容器中運行Docker守護程序。

資源

使用命令docker run --privileged -it centos:centos7 bash運行基本映像。 然后,您可以在該容器內安裝並運行另一個docker容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM