我试图在docker中创建一个多阶段的构建,它简单地运行一个非根crontab,该crontab写入可从容器外部访问的卷。我在权限、卷外部访问和cron方面有两个问题:
>
dockerfile中的第一个构建使用入口点
和su-exec
创建一个非root用户映像,用于修复卷权限!
同一个dockerfile中的第二个构建使用第一个映像运行crond进程,该进程通常写入 /backup文件夹。
docker组成。用于构建dockerfile的yml
文件:
version: '3.4'
services:
scrap_service:
build: .
container_name: "flight_scrap"
volumes:
- /home/rey/Volumes/mongo/backup:/backup
在DockerFile(1)的第一步中,我试图将丹尼斯·贝尔托维奇给出的答案改编为阿尔卑斯图像
############################################################
# STAGE 1
############################################################
# Create first stage image
FROM gliderlabs/alpine:edge as baseStage
RUN echo http://nl.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories
RUN apk add --update && apk add -f gnupg ca-certificates curl dpkg su-exec shadow
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
# ADD NON ROOT USER, i hard fix value to 1000, my current id
RUN addgroup scrapy \
&& adduser -h /home/scrapy -u 1000 -S -G scrapy scrapy
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
我的docker-entrypoint.sh
修复权限是:
#!/usr/bin/env bash
chown -R scrapy .
exec su-exec scrapy "$@"
第二阶段(2)运行cron服务以写入作为卷装载的/backup文件夹
############################################################
# STAGE 2
############################################################
FROM baseStage
MAINTAINER rey
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apk add busybox-suid
RUN apk add -f tini bash build-base curl
# CREATE FUTURE VOLUME FOLDER WRITEABLE BY SCRAPY USER
RUN mkdir /backup && chown scrapy:scrapy /backup
# INIT NON ROOT USER CRON CRONTAB
COPY crontab /var/spool/cron/crontabs/scrapy
RUN chmod 0600 /var/spool/cron/crontabs/scrapy
RUN chown scrapy:scrapy /var/spool/cron/crontabs/scrapy
RUN touch /var/log/cron.log
RUN chown scrapy:scrapy /var/log/cron.log
# Switch to user SCRAPY already created in stage 1
WORKDIR /home/scrapy
USER scrapy
# SET TIMEZONE https://serverfault.com/questions/683605/docker-container-time-timezone-will-not-reflect-changes
VOLUME /backup
ENTRYPOINT ["/sbin/tini"]
CMD ["crond", "-f", "-l", "8", "-L", "/var/log/cron.log"]
crontab文件通常将测试文件创建到/back
卷文件夹中:
* * * * * touch /backup/testCRON
调试阶段:
>
使用bash登录我的图像,似乎图像正确运行了抓取的用户:
uid=1000(scrapy) gid=1000(scrapy) groups=1000(scrapy)
克朗塔布 -e
命令还提供了正确的信息
但第一个错误是,当icat/var/log/cron时,cron不能正确运行。日志
我有一个拒绝权限的错误
crond: crond (busybox 1.27.2) started, log level 8
crond: root: Permission denied
crond: root: Permission denied
当我尝试使用命令touch /backup/testFile
直接写入 /backup文件夹时,我还出现了第二个错误。/back
卷文件夹仍然只能使用root权限访问,不知道为什么。
docker 17.09.0-CE版本 docker-compose版本1.8.0
问题内容: 我以非root用户身份在Docker容器中运行应用程序。我这样做是因为这是最佳做法之一。但是,在运行容器时,我将主机卷安装到该容器上。我这样做是因为在docker容器中运行的应用程序需要将文件写入已安装的主机文件夹中。但是由于我以非root用户身份运行应用程序,因此它无权写入该文件夹 题 是否可以授予docker容器中的非root用户访问托管卷的权限? 如果不是,我唯一的选择是以roo
我已经安装了XAMPP在localhost:8080,但我不能访问phpmyadmin与消息错误: [MySQL说:文档#1045-拒绝用户'root'@'localhost'访问(使用密码:NO)]
我在Dockerfile中使用<code>alpine</code>(或基于alpine的图像)作为基础图像。创建用户需要添加哪些指令? 最终,我将使用此用户来运行我将放入容器中的应用程序,以便 root 用户不会这样做。
问题内容: 我正在尝试将用户切换到tomcat7用户,以设置SSH证书。 当我这样做时,什么也没发生。 做完后还是发根 这样做,我得到以下结果,清楚地表明存在tomcat7用户: 我正在尝试解决的是哈德森中的此错误: 这是我的Dockerfile,它需要一个已存在的hudson war文件和配置,并构建一个映像,hudson运行良好,由于用户tomcat7不存在证书而无法访问git。 我正在使用最
我在PC上使用WAMP服务器2.2。在phpMyAdmin(5.5.24)中,我编辑了“root”用户(带有“localhost”主机),并给它一个密码“root”。这是一个很大的错误,我正试图挽回。现在,当我转到localhost/phpmyadmin/时,我得到了左侧的数据库菜单,但是主框架有一个错误,它是: 我尝试将用户的密码改回无密码;我尝试修改config.inc.php文件以添加新密码