2 回答

TA貢獻1816條經驗 獲得超6個贊
Dockerfile 中 ADD 和 COPY 命令不能使用絕對路徑,只能使用相對路徑。 這點在官方文檔中說的比較清楚 如果不是非要把文件 build 到 image里,可以通過 run container 的時候通過 -v 參數將 host 文件或目錄加載/共享到 container 里。

TA貢獻1805條經驗 獲得超10個贊
將ubuntu push到私有registry
docker push rd-server:5000/ubuntu
如何將ubuntu的所有分支都鏡像到自己的私有倉庫?
1.先打TAG,把需要的版本打上標簽,然后進行推送
語句大概是這個樣子的:
docker tag eb601b8965b8 rd-server:5000/ubuntu:raring
docker tag eb601b8965b8 rd-server:5000/ubuntu:13.04
docker tag 9f676bd305a4 rd-server:5000/ubuntu:saucy
docker tag 9f676bd305a4 rd-server:5000/ubuntu:13.10
docker tag 9cd978db300e rd-server:5000/ubuntu:precise
docker tag 9cd978db300e rd-server:5000/ubuntu:latest
docker tag 9cd978db300e rd-server:5000/ubuntu:12.04
docker tag 9cc9ea5ea540 rd-server:5000/ubuntu:lucid
docker tag 9cc9ea5ea540 rd-server:5000/ubuntu:10.04
docker tag 5ac751e8d623 rd-server:5000/ubuntu:quantal
docker tag 5ac751e8d623 rd-server:5000/ubuntu:12.10
開始推送
docker push rd-server:5000/ubuntu
如果返回的內容的最后一行是下面這個樣子的
2014/03/14 08:22:14 push: }
請反復執行,沒錯,不要懷疑,請循環一直反復執行下去
docker pull rd-server:5000/ubuntu
直到不再出現 push:
}的字樣
不知道這是docker的BUG還是本身設計是這樣的,需要反復多次push才能將完整的tag推送到private
registry里,否則在客戶端下載的時候總會提示某些image找不到,個人猜測可能是這么設計的,因為docker
image比較大,而一個repo會有很多的塊文件,每次push的時候只Push一個塊,好了,猜測就道這,活還是得干,所以,寫個腳本解決手工的問題吧。
#!/bin/sh
#
#Copyright (c) 2014 ZhengXujin [email protected]
#
server="127.0.0.1:5000"
index_repo_name="username/ubuntu"
private_repo_name="ubuntu"
echo "\n"
echo " ## ."
echo " ## ## ## =="
echo " ## ## ## ## ==="
echo " /""""""""""""""""\___/ ==="
echo " ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~"
echo " \______ o __/"
echo " \ \ __/"
echo " \____\______/"
echo "\n"
idx=0
is_continue=1
docker images|grep -q "$server/$private_repo_name"
if [[ $? -ne 0 ]]; then
docker images|grep $index_repo_name|awk -F" " '{printf("docker tag %s %s/%s:%s\n",$3,"'$server'","'$private_repo_name'",$2)}'|bash
fi
while [ $is_continue -eq 1 ]
do
docker push $server/$private_repo_name
is_continue=$?
let idx=$idx+1
echo "$(tput setaf 1)continue push, $idx times pushed. $(tput sgr
- 2 回答
- 0 關注
- 1521 瀏覽
添加回答
舉報