Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu PHP存储库是否过期?_Php_Docker_Ubuntu_Ubuntu 16.04 - Fatal编程技术网

Ubuntu PHP存储库是否过期?

Ubuntu PHP存储库是否过期?,php,docker,ubuntu,ubuntu-16.04,Php,Docker,Ubuntu,Ubuntu 16.04,免责声明:我对linux、ubuntu、docker等不是很熟悉。我只知道一些东西 软件环境:Ubuntu 16.04+docker+docker compose 我有一个Dockerfile,其中还安装了PHP 7.2: FROM ubuntu:16.04 .... RUN LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php RUN apt-get update RUN apt-get install -y --force-yes php

免责声明:我对linux、ubuntu、docker等不是很熟悉。我只知道一些东西


软件环境:Ubuntu 16.04+docker+docker compose

我有一个Dockerfile,其中还安装了PHP 7.2:

FROM ubuntu:16.04
....
RUN LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
RUN apt-get update
RUN apt-get install -y --force-yes php7.2-bcmath php7.2-cli php7.2-common php7.2-curl \
                php7.2-cgi php7.2-dev php7.2-fpm php7.2-gd php7.2-gmp php7.2-imap php7.2-intl \
                php7.2-json php7.2-mbstring php7.2-mysql \
                php7.2-opcache php7.2-phpdbg php7.2-mongodb \
                php7.2-readline php7.2-recode \
                php7.2-tidy php7.2-xml php7.2-xsl php7.2-zip \
                && rm -rf /var/lib/apt/lists/*
....
上一次我创建该图像是几周前的它工作得很好,我从该图像开始创建的容器的行为符合预期

我最近发现我还需要PHP的SOAP扩展(不要问为什么…),所以我只是在上面的列表中添加了扩展
php7.2-SOAP
,并完成了以下操作:

docker-compose stop
docker-compose build <my_docker_service_name>
docker编写停止
docker组合构建
构建已启动,下载一些内容后,将停止:

....
Get:112 http://archive.ubuntu.com/ubuntu xenial/main amd64 shtool all 2.0.8-8 [122 kB]
W: --force-yes is deprecated, use one of the options starting with --allow instead.
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/t/tzdata/tzdata_2018g-0ubuntu0.16.04_all.deb  404  Not Found [IP: 91.189.88.152 80]

E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_4.4.0-140.166_amd64.deb  404  Not Found [IP: 91.189.88.152 80]

E: Failed to fetch http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1-3+ubuntu16.04.1+deb.sury.org+3_amd64.deb  404  Not Found

E: Failed to fetch http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/o/openssl/libssl-dev_1.1.1-3+ubuntu16.04.1+deb.sury.org+3_amd64.deb  404  Not Found

E: Failed to fetch http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/p/php-defaults/php-common_68+ubuntu16.04.1+deb.sury.org+1_all.deb  404  Not Found

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
Fetched 57.5 MB in 43s (1331 kB/s)
ERROR: Service '<my_service_name>' failed to build: The command '/bin/sh -c apt-get install -y --force-yes php7.2 (....) && rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100
。。。。
Get:112http://archive.ubuntu.com/ubuntu xenial/main amd64工具所有2.0.8-8[122 kB]
W:--force yes不推荐使用,请使用以--allow开头的选项之一。
E:获取失败http://security.ubuntu.com/ubuntu/pool/main/t/tzdata/tzdata_2018g-0ubuntu0.16.04_all.deb  404未找到[IP:91.189.88.152 80]
E:获取失败http://archive.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_4.4.0-140.166_amd64.deb  404未找到[IP:91.189.88.152 80]
E:获取失败http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1-3+未找到ubuntu16.04.1+deb.sury.org+3_amd64.deb 404
E:获取失败http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/o/openssl/libssl-dev_1.1.1-3+未找到ubuntu16.04.1+deb.sury.org+3_amd64.deb 404
E:获取失败http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/p/php-defaults/php-common_68+未找到ubuntu16.04.1+deb.sury.org+1_all.deb 404
E:无法获取一些存档,可能运行apt get update或尝试使用--fix missing?
在43秒内获取57.5 MB(1331 kB/s)
错误:服务“”生成失败:命令“/bin/sh-c apt get install-y--force yes php7.2(..)&&rm-rf/var/lib/apt/lists/*”返回非零代码:100
所以我对自己说,简单地添加SOAP扩展是行不通的。如果您转到ppa:ondrej/php-ppa页面,您会发现它非常混乱,因为Docker成功安装的其他扩展没有列出。这就是为什么我认为将SOAP添加到列表中可能有效的原因

因此,我从列表中删除了
php7.2-soap
扩展,出于好奇,我再次尝试构建图像。而且。。。惊奇:它以完全相同的方式失败了。尽管几周前它还可以正常工作


因此,我的问题是:

1) 。知道如何在那里添加SOAP扩展吗?我曾考虑使用DockerHub的官方PHP图像,但要使其与Dockerfile中已有的其他内容(最著名的是IngX)协同工作可能会非常困难


2) 。由于构建失败,Dockerfile中没有任何更改,这是否意味着我安装PHP的方式有缺陷/过时,应该更换?如果是,用什么?如果没有,为什么会发生这种情况?是因为一个简单的网络错误吗?或者可能是因为我使用的是Ubuntu-16.04,我应该升级到18.04或类似版本?

Debian APT系统引用了极其特定的软件包版本。如果某个包有任何类型的更新(错误修复、安全更新、描述文本中的拼写错误等),将使用新版本号重新发布该包,并从存储库中删除具有旧版本号的包。通常的解决方法是重新运行
apt-get-update

看起来您的Dockerfile可以做到这一点,但您可能被另一个Docker功能绊倒了。当您第二次运行
docker build
时,docker说,“我已经在这个输入图像上运行了这个命令,并且知道它生成了这个输出图像,所以我不会再运行它”。如果上游内容确实发生了变化,那么这可能是一个问题

在这种特定情况下,通常的答案是始终在同一个run命令中运行
apt get update
apt get install
。然后,如果您确实更改了已安装软件包的列表,Docker将首先获得更新的软件包索引

RUN apt-get update \
 && apt-get install -y ...

Docker将在该时间点创建已更改文件系统的缓存版本

与现在可用的数据相比,先前运行的
apt get update
命令可能有过时的数据

docker build
将仅在已更改的行之后构建回购(在本例中,您的
apt get install
命令)

尝试使用--no cache标志运行
docker build
,如下所示:

docker-compose build --no-cache <my_docker_service_name>
docker compose构建--无缓存

是的,这东西确实过期了(不确定是哪一位)。正如错误提示的那样,在尝试安装之前,请尝试运行
apt get update
。我应用了你的建议和@DavidMaze的建议。谢谢。另一个替代方法是在docker build中使用--no cache标志进行构建