首页 > 其他分享 >Docker 如何实现非root用户构建httpd镜像以及遇到的问题有哪些

Docker 如何实现非root用户构建httpd镜像以及遇到的问题有哪些

时间:2022-11-09 09:47:46浏览次数:57  
标签:httpd www etc conf 镜像 Docker root docker

为什么要用非root来构建httpd呢?
由于公司云平台,一般的web组件。不允许用root用户来部署相关应用程序。所以只能编写dockerfile先构建镜像,然后再部署到云平台(kubenetes集群),主要从安全问题来考虑的。还有本来我这个职位职责是管理租户应用问题,但是测试机器没部署。只能自己找镜像,写file部署。中间遇到了很多问题,可能由于我的技术比较菜导致的吧。掉坑里一天出不来,最后还是慢慢排错出来的。不聊别的了,聊聊技术吧。

首先我们需要准备一个干净的镜像,因为我们云平台有docker仓库Harbor。所以我只需要使用命令拉取镜像:
docker push 10.0.0.1/public/bclinux:1.1.1

拉取镜像之后,需要使用docker run 命令去运行,我拉取的镜像:
docker run --name tudo:1.1.1 -tid 10.0.0.1/public/bclinux:1.1.1

进入运行的docker的容器中(未运行的叫镜像、运行了就叫容器了)
docker exec -ti tudo:1.1.1 /bin/bash

修改基础镜像的yum源文件,因为内网涉及安全问题一般yum源配置是:
cat >/etc/yum.repos.d/os.repo<<EOF
[centos7]
name=Server
baseurl=http://10.0.0.1/fpz #源路径
gpgcheck=0
gpgcheck=1 #是否检查GPG(GNU Private Guard),一种密钥方式签名。
EOF

使用yum install -y httpd 部署安装完成后使用systemctl启动报错
# systemctl start httpd
System has not been booed with systemd as init system (PID 1).Can't operate.
Failed to connect to bus: Host is down

怎么解决报错呢?答案是跳过这种方式去启动httpd直接用路径启动
#type httpd
httpd is /usr/sbin/httpd

执行完命令发现还有问题
#/usr/sbin/httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.0.0.9. Set the 'ServerName' directive globally to suppress this message
httpd (pid 18) already running
报错的意思是我们没有修改/etc/httpd/conf/http.conf配置文件的参数导致
ServerName localhost:80
再启动
#/usr/sbin/httpd
启动成功了
启动后我们要编写docker file文件
vi /date/dockerfile
FROM 10.0.0.1/public/bclinux:1.1.1
RUN groupadd www
RUN useradd www -g www -u 1911
RUN chown -R www:www /etc/httpd/conf/httpd.conf
RUN chmod -R 755 /etc/httpd/conf/httpd.conf
RUN chown -R www:www /usr/sbin/httpd
RUN chown -R www:www /etc/httpd/logs/
RUN chmod -R 755 /etc/httpd/logs/
RUN chown -R www:www /run/httpd/
RUN chmod -R 755 /run/httpd
RUN chmod -R 755 /usr/sbin/httpd
RUN mkdir -p /var/tmp/logs/
RUN chown -R www:www /var/tmp/
RUN mkdir -p /date
ADD start.sh /date
RUN chmod a+x /date/start.sh
RUN chown -R www:www /date/start.sh
RUN chmod -R 755 /var/tmp/
RUN sed -i 's/User apache/User www/g' /etc/httpd/conf/httpd.conf
RUN sed -i 's/Group apache/Group www/g' /etc/httpd/conf/httpd.conf
RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost:8080/g' /etc/httpd/conf/httpd.conf
RUN sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
USER 1911
ENTRYPOINT ["sh","/date/start.sh"]

启动脚本start.sh编写
vi /date/start.sh
#!/bin/bash
/usr/sbin/httpd -D FOREGROUND
不加 -D FOREGROUND会报错别问我为什么知道的。因为这里我卡了很久。。。。
重启提示AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

构建镜像使用docker命令
1.构建命令
docker build -f dockerfile -t httpjingxing:1.1.1 .
(还有个问题docker构建镜像镜像名不能大写会报错)
2.上传命令
docker push httpjingxing:1.1.1


到此完结。。。。。。。。。。。。

标签:httpd,www,etc,conf,镜像,Docker,root,docker
From: https://www.cnblogs.com/daivi01/p/16872522.html

相关文章

  • k8s--docker状态码
    最常见的退出码,来回答两个重要问题:这些退出码是什么意思?导致该退出码的动作是什么?exitcode:代表一个进程的返回码,通过系统调用exit_group来触发。在POSIX中,0代表正常......
  • 第2-1-5章 docker安装MinIO实现文件存储服务-springboot整合minio-minio全网最全的资
    目录1.MinIO介绍2.MinIO应用场景2.1单主机单硬盘模式2.2单主机多硬盘模式2.3多主机多硬盘分布式3.MinIO特点4.存储机制5.docker安装MinIO6.docker-compose安装Min......
  • valheim英灵神殿Linux使用docker开服
    valheim英灵神殿Linux使用docker开服使用机器:2核4G的Ubuntu,swap设置为8G(满足配置能装docker的Linux就行)在docker官网的镜像站有别人封装好的镜像,我们下载下来启动就可......
  • ansible部署httpd和haproxy
    角色部署httpd[root@ansibleansible]#lsansible.cfghostsphp.ymlapache.ymlmysql.ymlroles[root@ansibleansible]#vimhosts[webservers]node1no......
  • Docker kill 1无效
    前言我们在平常强制停用一个进程的时候,会选择什么命令?一般在测试使,不考虑程序突然中断带来的影响,直接使用kill-9pid强制停止就行.但是,就在刚刚,我启动了一......
  • linux 用户增加root权限
    1.切换到root用户下2.添加sudo文件的写权限,命令是:chmod u+w/etc/sudoers 3.编辑sudoers文件vi/etc/sudoers找到这行rootALL=(ALL)ALL,在他下面添加xxxALL......
  • phpstrom docker swoole win10
    构建镜像dockerfile点击查看代码#现在我们需要配置一些东西。#编译参数,用于指定Swoole版本ARGswoole_ver#保存到环境变量,如果没有传递就给默认值ENVSWOOLE_......
  • docker 快速部署 elasticseach kafa mysql redis pgsql etcd
    version:"3"services:pgsql:container_name:pgsqlimage:postgres:latestprivileged:trueenvironment:POSTGRES_PASSWORD:password......
  • [被vscode烦到了] root 用户无法启动 vscode 的解决方法
    root用户无法启动vscode的解决方法vscodewithroot解决方法总结vscodewithroot今天切换到Ubuntu的root用户进行编码调试,发现VSCode一直无法打开,命令提示和网上......
  • docker-compose 搭建 InfluxDB Cluster
    InfluxDBCluster官网GitHub:chengshiwen/influxdb-clusterWiki文档:chengshiwen/influxdb-cluster/wiki下载地址:chengshiwen/influxdb-cluster/releases网络架构图......