[英]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.