初次在ECS使用docker,如文章所述有误,劳烦看官留言指正,谢过!
日期:2017-07-19
平台: 阿里云 ECS
操作系统: Centos 7
注明日期,只是辅助看官参考,随时间过去,文中所述不一定适用您遇到的问题。
言归正传
本文重点讲,ECS中docker build 不能访问外网的问题,
所以,如何安装或部署golang服务,请参考
使用alpinelinux 构建 golang http ,
创建镜像的Dockerfile如下:
FROM alpine:latest
MAINTAINER demo <juest a demo>
RUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/main\n\
https://mirrors.aliyun.com/alpine/v3.6/main" >> /etc/apk/repositories
RUN apk add --update curl bash && \
rm -rf /var/cache/apk/*
RUN mkdir -p /data/go
COPY http /data/go
EXPOSE 8080
ENTRYPOINT ["/data/go/http"]
提示如下错误:
...
fetch https://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/main/x86_64/APKINDEX.tar.gz
ERROR: https://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.951f4ce6.tar.gz: No such file or directory
fetch https://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/community/x86_64/APKINDEX.tar.gz
ERROR: https://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/community: temporary error (try again later)
WARNING: Ignoring APKINDEX.d4f262b4.tar.gz: No such file or directory
ERROR: unsatisfiable constraints:
bash (missing):
required by: world[bash]
curl (missing):
required by: world[curl]
The command '/bin/sh -c apk add --update curl bash && rm -rf /var/cache/apk/*' returned a non-zero code: 2
因为初次使用docker,开始也不知道具体发生了什么问题,因为上面的地址和链接在本地都是可以访问的,所以猜测是docker容器不能访问外网,但是同样的Dockerfile在笔者本地环境是没有问题的,在ECS上又试了ubuntu的最新镜像启动的容器,同样是无法访问外网。
查阅一些资料后,得知如果是启动容器无法访问外网,docker run 的时候可以添加 --net=host 可以使容器使用宿主机的网络访问外网,但现在是要生成镜像docker build。
经过一番google,最后总结如下解决方案(已解决笔者遇到的问题)
在宿主机中,进行如下操作:
一、 查看宿主机的nameserver
> cat /etc/resolv.conf
domain mycompany
search mycompany
nameserver xxx.xxx.xxx.xxx
二、 创建或修改 /etc/default/docker,在其中添加或编辑如下选项
DOCKER_OPTS="--dns xxx.xxx.xxx.xxx"
三、 重启 docker
systemctl restart docker
然后重新执行 docker build 全部通过