我写了一个简单的程序,它应该打印1到9之间的数字,等待1秒钟打印.
#!/usr/bin/env perl6
my $x = 1;
while $x < 10 {
say $x++;
sleep(1);
}
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行它时,它按预期工作
我试图使用docker容器和程序打印的第一个数字来实现相同的效果,然后在9秒后冻结并打印剩余的数字.
我的码头组成
version: "3.1"
services:
cron:
build: phpdocker/cron
container_name: docker-perl6
volumes:
- ./cron:/cron
working_dir: /cron
command: "app.pl"
Run Code Online (Sandbox Code Playgroud)
和Dockerfile
FROM jjmerelo/alpine-perl6
Run Code Online (Sandbox Code Playgroud)
版本
docker -v
Docker version 18.03.1-ce, build 9ee9f40
docker-compose -v
docker-compose version 1.15.0, build e12f3b9
perl6 -v
This is Rakudo version 2018.03-136-g768cf9f built on MoarVM version 2018.03-56-g85fc758
implementing Perl 6.c.
Run Code Online (Sandbox Code Playgroud)
我换say $x++;了say "{time}: {$x++}";
docker-perl6 | 1527933936: …Run Code Online (Sandbox Code Playgroud) 我有一个在 Docker 中运行的 PHP/Symfony 应用程序,它使用 Monolog 登录到 stdout/stderr。这一切都很好,除非在容器内运行 Symfony 控制台命令。
monolog:
handlers:
stdout:
type: filter
handler: stdout_unfiltered
max_level: notice
channels: ['!event']
stdout_unfiltered:
type: stream
level: debug
path: 'php://stdout'
stderr:
type: stream
level: warning
channels: ['!event']
path: 'php://stderr'
console:
type: console
channels: ['!console', '!doctrine', '!event']
process_psr_3_messages: false
Run Code Online (Sandbox Code Playgroud)
问题在于,无论何时执行命令,“stdout”、“stderr”和“console”处理程序都会记录到当前终端进程。这会导致控制台输出混乱,并且docker logs不包含日志条目:http : //i.imgur.com/yB1IKrR.png。
是否有一种简单的方法可以始终将日志输出发送到 php-fpm(或任何工作程序)进程?
我有一个 python 脚本,用于填充 AWS 中的 Postgres 数据库。
我能够手动运行它并且它正在将数据加载到数据库中而没有任何问题。我想在 docker 容器内每 5 分钟运行一次。
所以我将它包含在 docker 镜像中运行。但我不确定为什么它没有运行。我看不到任何附加到/var/log/cron.log文件的内容。有人可以帮我弄清楚为什么它没有运行吗?
我能够在 docker build 期间将脚本复制到图像并能够手动运行它。正在填充数据库,我得到了预期的输出。
脚本位于当前目录中,该目录将被复制到/code/文件夹中
这是我的代码:
Dockerfile:
FROM python:3
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get install -y cron
RUN apt-get install -y postgresql-client
RUN touch /var/log/cron.log
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD . /code/
COPY crontab /etc/cron.d/cjob
RUN chmod 0644 /etc/cron.d/cjob
CMD cron && tail -f /var/log/cron.log
Run Code Online (Sandbox Code Playgroud)
定时任务:
*/5 * * * * python3 …Run Code Online (Sandbox Code Playgroud) 我想通过docker run命令运行docker 并希望像 bleow 一样传递 crontab 命令。
crontab -l | '{ /bin/cat; /bin/echo "*/5 * * * * <some command>"; }' | crontab -
Run Code Online (Sandbox Code Playgroud)
上面的命令将创建一个 cronscript,它将在新创建的 docker 容器内每 5 分钟运行一次。
构建映像时我不需要提供此命令。*此 docker 将在计划作业时创建。
我正在使用 docker-compose。我有一个网络和一个工人服务。
version: '3'
services:
web:
build: .
environment:
- "*"
links:
- redis
- memcached
ports:
- "80:8001"
- "443:8001"
worker:
build: .
command: ["/bin/bash", "/home/django/start_celery.sh"]
environment:
- "*"
links:
- redis
- memcached
memcached:
image: memcached
ports:
- "11211:11211"
redis:
image: redis
ports:
- "6379:6379"
Run Code Online (Sandbox Code Playgroud)
我需要在工作服务上运行 crons(计划任务)。
而且我不想在 Dockerfile 中对 crontab 进行硬编码,因为我对这两个服务使用相同的 dockerfile。
那么最好的方法是什么?
我正在尝试在创建和配置网络应用程序后添加网络作业。但 webjobs 选项卡被禁用

我想在 MariaDB 容器中包含一个基于最新映像的 cron 任务mariadb,但我坚持这样做。
我尝试了很多方法但没有成功,因为我无法同时启动 MariaDB 和 Cron。
这是我实际的 dockerfile:
FROM mariadb:10.3
# DB settings
ENV MYSQL_DATABASE=beurre \
MYSQL_ROOT_PASSWORD=beurette
COPY ./data /docker-entrypoint-initdb.d
COPY ./keys/keys.enc home/mdb/
COPY ./config/encryption.cnf /etc/mysql/conf.d/encryption.cnf
# Installations
RUN apt-get update && apt-get -y install python cron
# Cron
RUN touch /etc/cron.d/bp-cron
RUN printf '* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1\n#' >> /etc/cron.d/bp-cron
RUN touch /var/log/cron.log
RUN chmod 0644 /etc/cron.d/bp-cron
RUN cron
Run Code Online (Sandbox Code Playgroud)
通过其设置,数据库可以正确启动,但“Cron”未初始化。为了使其工作,我必须进入容器并执行“Cron”命令,一切都运行良好。
因此,我正在寻找一种从 docker-compose 中使用的 Dockerfile 启动 db 和 …
我有使用CMD ["cron","-f"]命令运行 cron 的 docker
。这会将输出写入 cron 日志文件。
有什么办法可以将这些日志重定向到控制台。
我的基本图像看起来像
FROM ubuntu:latest
RUN ls
RUN apt-get update
RUN apt install -y software-properties-common
RUN add-apt-repository -y ppa:openjdk-r/ppa
RUN apt-get update
RUN apt-get install -y openjdk-12-jre
RUN apt-get -y install cron wget unzip
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
&& apt-get update -qqy \
&& apt-get -qqy install google-chrome-stable \
&& rm /etc/apt/sources.list.d/google-chrome.list \
&& rm …Run Code Online (Sandbox Code Playgroud) 在 mongodb docker 页面中,有以下关于如何转储 mongodb 集合的教程:
sudo docker exec container_name sh -c 'exec mongodump -d collection_name --archive' > /home/mongo_backup/all-collections.archive
Run Code Online (Sandbox Code Playgroud)
我想创建另一个定期运行此转储的容器(例如,一天两次)并将其保存到安装在其中的文件夹中。但是我可以mongodump从不是具有集合的容器的容器中提取吗?我可以mongodump通过本地网络吗?
解决这个问题后,仍然存在这个备份发送到哪里的问题。它不能与我部署的代码在同一个地方,因为它可能会被意外删除。
这是一个好的备份策略吗?有什么更好的想法吗?