Docker在Mac OSX Ubuntu上进行apt-get update失败

8

我正在使用Ubuntu Docker镜像:ubuntu:14.04

我想使用以下命令更新我的代码库:

RUN apt-get  update

但是我一直收到这个错误提示:
W: GPG error: http://archive.ubuntu.com trusty Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 16126D3A3E5C1192
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/main/binary-amd64/Packages  Hash Sum mismatch

E: Some index files failed to download. They have been ignored, or old ones used instead.

我尝试了几种方法,包括 apt-get cleanRUN rm -R /var/lib/apt/lists/* -vf,但都没有解决问题。

你有什么办法可以忽略这个错误并继续构建容器吗?

更新:

这是我的完整 Dockerfile:

FROM ubuntu:14.04

VOLUME ["/var/www"]

RUN apt-get update
RUN apt-get upgrade -y

RUN apt-get install -y --force-yes redis-tools git nano curl sendmail openssh-server apache2 supervisor php5 php5-curl php5-cli libapache2-mod-php5 php5-gd php5-json php5-ldap php5-mysql php5-pgsql php5-mcrypt php5-xdebug
RUN mkdir -p /var/run/sshd
RUN mkdir -p /var/log/supervisor

RUN useradd ubuntu -d /home/ubuntu
RUN usermod -a -G sudo ubuntu
RUN mkdir -p /home/ubuntu/.ssh
RUN chmod 700 /home/ubuntu/.ssh
RUN chown ubuntu:ubuntu /home/ubuntu/.ssh

ADD apache_default /etc/apache2/sites-available/000-default.conf
RUN a2enmod rewrite
RUN php5enmod mcrypt
RUN sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/apache2/php.ini
RUN sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/cli/php.ini
RUN sed -ri 's/^PermitRootLogin.*$/PermitRootLogin yes/g' /etc/ssh/sshd_config

#Add XDEBUG
RUN echo "[xdebug]" >> /etc/php5/apache2/php.ini
RUN echo "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so" >> /etc/php5/apache2/php.ini
RUN echo "xdebug.remote_enable=1" >> /etc/php5/apache2/php.ini
RUN echo "xdebug.remote_connect_back=1" >> /etc/php5/apache2/php.ini
RUN echo "xdebug.remote_port=9000" >> /etc/php5/apache2/php.ini
RUN echo "xdebug.show_local_vars=0" >> /etc/php5/apache2/php.ini
RUN echo "xdebug.var_display_max_data=10000" >> /etc/php5/apache2/php.ini
RUN echo "xdebug.var_display_max_depth=20" >> /etc/php5/apache2/php.ini
RUN echo "xdebug.show_exception_trace=0" >> /etc/php5/apache2/php.ini

#Allow SSH Root
ADD sshd_config /etc/ssh/sshd_config
RUN service ssh reload
RUN service ssh restart

#Install Composer
RUN curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer


ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
ADD run /usr/local/bin/
RUN chmod +x /usr/local/bin/run
EXPOSE 22 80
CMD ["/usr/local/bin/run"]

@WaleryStrauch 我把它添加到了我的问题中。 - Asaf Nevo
@thaJeztah 这个拉取实际上帮了很多。但出于某种原因,它在包中仍然有相同的错误,只是跳过了它...也许是缓存的问题? - Asaf Nevo
你可以始终使用 docker build --no-cache 来跳过缓存,不确定是什么导致了这个问题;可能是某个镜像没有更新? - thaJeztah
可能是这样。我没有使用缓存,所以才出现了奇怪的情况。 - Asaf Nevo
@AsafNevo 完成了;请见下文 - thaJeztah
显示剩余4条评论
4个回答

5

在我的情况下,这是由于我在Mac上使用的“屏幕时间”功能所导致的。(为什么MacOS安装时默认启用它呢?)无论如何,前往设置,找到“屏幕时间”,然后禁用这个该死的东西。希望这能帮助一些可怜的Mac用户节省许多失去的时间。


还有一件事。为什么屏幕时间会阻止下载Docker文件????我的天啊! - Just a coder
对我来说没有解决问题。而且屏幕时间会破坏Ubuntu Docker镜像的想法令人难以置信。 - Sean Clark Hess
这就是我之前的想法,直到我将其禁用。这个答案还有两个赞,所以看起来它帮助了除我之外的其他两个人。 - Just a coder

4

你的镜像缓存中可能存在过时的Ubuntu版本。运行docker pull ubuntu:14.04确保你有最新版本。

apt-get update应该可以直接使用,如果它不工作,则可能有其他问题(可能是过时的缓存镜像或代理服务器导致的问题)。

另外,在构建过程中跳过docker的缓存机制,你可以使用--no-cache选项;docker build --no-cache .


这件事情还在继续发生.. 我刚刚重新下载了Ubuntu14.04,但我仍然收到以下信息: "W: GPG 错误:http://archive.ubuntu.com trusty Release: 由于公钥不可用,无法验证以下签名:NO_PUBKEY 16126D3A3E5C1192 W: 获取 http://archive.ubuntu.com/ubuntu/dists/trusty-updates/main/binary-amd64/Packages 时哈希校验和不匹配E: 一些索引文件无法下载。它们已被忽略或使用旧的文件。" - Asaf Nevo
你是否在(公司)代理服务器后面? - thaJeztah
不行,这是我的个人Mac。 - Asaf Nevo

1
我最近遇到了同样的问题,并通过禁用iCloud私人中继来解决它。
这似乎与此问题有关。

0

在你的Dockerfile中,在RUN apt-get update之前尝试添加以下内容:

RUN gpg --keyserver subkeys.pgp.net --recv 16126D3A3E5C1192
RUN gpg --export --armor 16126D3A3E5C1192 | sudo apt-key add -

1
这应该是不必要的;如果没有问题,apt-get update 应该可以直接使用。 - thaJeztah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接