本次升級設計 httpd 及 openssl ,修復目前市面上掃描出來的安全漏洞。
目的:
docker 中 httpd 從 2.4.6 升級至 2.4.39、openssl 從 1.0.2k-6 升級至 1.0.2k-19
1、基於 ius 源下載 httpd 2.4.39,基於紅帽官網取的最新的 openssl
ius地址:https://mirrors.tuna.tsinghua.edu.cn/ius/ius-release-el7.rpm
2、拷貝安裝包至 docker 容器
docker cp update-httpd-openssl.tar portal:/home
3、進入容器進行httpd安裝升級
docker exec -it -u root portal bash cd /home tar -xvf update-httpd-openssl.tar cd update-httpd-openssl #注意:本次升級需要卸載之前的 httpd 才可以升級 yum remove -y httpd-tools-2.4.6-67.el7.centos.6.x86_64 yum install *
4、檢查是否已升級成功
httpd -version
5、重啟容器
附加:
升級失敗容器回退方法:通過 kolla-docker-restart 腳本提取現有容器的啟動方式,在 /tmp 下生成容器啟動腳本,刪掉現有容器,運行啟動腳本重新生成鏡像。
kolla-docker-restart portal
#!/usr/bin/env bash # kolla-docker-restart [[ $# -ne 1 ]] && echo "Usage: $0 <container_name_or_id>" && exit 1 container_name_or_id=$1 run_file="/tmp/start-$container_name_or_id" cat > /tmp/docker-run.tpl <<'EOF' docker run \ --name={{.Name}} \ {{range $e := .Config.Env}}--env={{printf "%q" $e}} \ {{end}}{{range $p, $conf := .NetworkSettings.Ports}}{{with $conf}}-p {{(index $conf 0).HostIp}}:{{(index $conf 0).HostPort}}:{{$p}} \ {{end}}{{end}}{{range $n, $conf := .NetworkSettings.Networks}}{{with $conf}}--network {{printf "%q" $n}} \ {{range $conf.Aliases}}--network-alias {{printf "%q" .}} {{end}} \ {{end}}{{end}}{{range $v := .HostConfig.VolumesFrom}}--volumes-from={{printf "%q" .}} \ {{end}}{{range $v := .HostConfig.Binds}}--volume={{printf "%q" .}} \ {{end}}{{range $l, $v := .Config.Labels}}--label {{printf "%q" $l}}={{printf "%q" $v}} \ {{end}}{{range $v := .HostConfig.CapAdd}}--cap-add {{printf "%q" .}} \ {{end}}{{range $v := .HostConfig.CapDrop}}--cap-drop {{printf "%q" .}} \ {{end}}{{range $d := .HostConfig.Devices}}--device={{printf "%q" (index $d).PathOnHost}}:{{printf "%q" (index $d).PathInContainer}}:{{(index $d).CgroupPermissions}} \ {{end}}{{range $v := .Config.Entrypoint}}--entrypoint={{printf "%q" .}} \ {{end}}{{with .HostConfig.LogConfig}}--log-driver={{printf "%q" .Type}} \ {{range $o, $v := .Config}}--log-opt {{$o}}={{printf "%q" $v}} \ {{end}}{{end}}{{with .HostConfig.RestartPolicy}}--restart="{{.Name}}{{if eq .Name "on-failure"}}{{.MaximumRetryCount}}{{end}}" \ {{end}}{{if .Config.Tty}}-t \ {{end}}{{if .Config.OpenStdin}}-i \ {{end}}{{if not (.Config.AttachStdout)}}--detach=true \ {{end}}{{if .HostConfig.Privileged}}--privileged \ {{end}}{{printf "%q" .Config.Image}} \ {{range .Config.Cmd}}{{printf "%q" .}} {{end}} EOF docker inspect --format "$(</tmp/docker-run.tpl)" "$container_name_or_id" > "$run_file" docker rm -f "$container_name_or_id" sh "$run_file" rm /tmp/docker-run.tpl "$run_file"