GVKun编程网logo

如何在 docker 容器中运行 cron 作业?(docker crontab)

9

想了解如何在docker容器中运行cron作业?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于dockercrontab的相关问题,此外,我们还将为您介绍关于5分钟教程:如何在Docker

想了解如何在 docker 容器中运行 cron 作业?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于docker crontab的相关问题,此外,我们还将为您介绍关于5 分钟教程:如何在 Docker 容器中运行 Nginx、Docker-如何在postgres容器中运行psql命令?、linux – 在Docker容器中运行预定的cron作业的解决方案?、linux – 如何在docker容器中运行cron作业的新知识。

本文目录一览:

如何在 docker 容器中运行 cron 作业?(docker crontab)

如何在 docker 容器中运行 cron 作业?(docker crontab)

我正在尝试在调用 shell 脚本的 docker 容器中运行 cronjob。

昨天我一直在网上搜索和堆栈溢出,但我真的找不到有效的解决方案。
我怎样才能做到这一点?

答案1

小编典典

您可以将 crontab 复制到映像中,以便从所述映像启动的容器运行作业。

请参阅Julien Boulay的“使用 Docker 运行 cron
作业”
Ekito/docker-cron

让我们创建一个名为“ hello-cron”的新文件来描述我们的工作。

* * * * * echo "Hello world" >> /var/log/cron.log 2>&1# An empty line is required at the end of this file for a valid cron file.

如果您想知道什么是 2>&1, 解释说。

以下 Dockerfile 描述了构建映像的所有步骤

FROM ubuntu:latestMAINTAINER docker@ekito.frRUN apt-get update && apt-get -y install cron# Copy hello-cron file to the cron.d directoryCOPY hello-cron /etc/cron.d/hello-cron# Give execution rights on the cron jobRUN chmod 0644 /etc/cron.d/hello-cron# Apply cron jobRUN crontab /etc/cron.d/hello-cron# Create the log file to be able to run tailRUN touch /var/log/cron.log# Run the command on container startupCMD cron && tail -f /var/log/cron.log

正如指出的那样:

关于一个陷阱的快速说明:
如果您要添加一个脚本文件并告诉 cron 运行它,请记住 如果您忘记了 Cron 会静默失败
RUN chmod 0744 /the_script



或者,确保您的工作本身直接重定向到 stdout/stderr
而不是日志文件,如下所述:

 * * * * * root echo hello > /proc/1/fd/1 2>/proc/1/fd/2

将最后 Dockerfile 行替换为

CMD ["cron", "-f"]

构建并运行它:

sudo docker build --rm -t ekito/cron-example .sudo docker run -t -i ekito/cron-example

请耐心等待 2 分钟,您的命令行应该会显示:

Hello worldHello world

补道:

请注意,tail如果在映像构建期间创建文件,可能不会显示正确的文件。
如果是这种情况,您需要在容器运行时创建或触摸文件,以便 tail 获取正确的文件。


AnalogJ/docker-cron请参阅基于以下内容的
Jason 的图像:

  • Dockerfile 安装cronie/ crond,取决于发行版。

  • 一个入口点初始化/etc/environment然后调用

    cron -f -l 2

5 分钟教程:如何在 Docker 容器中运行 Nginx

5 分钟教程:如何在 Docker 容器中运行 Nginx

在本教程中,您将学习如何将 Nginx 作为 Docker 容器运行,并将其公开给您的本地网络。此外,您将学习如何创建 Docker 数据卷以在容器和主机文件系统之间共享信息。

Nginx 是一种流行的开源软件,用于 Web 服务、反向代理、缓存、负载平衡等。它非常流行并在当今许多高流量网站上使用。Docker 最常见的工作负载之一是使用它来容器化 Web 服务器。我们将向您展示如何使用 Nginx 进行设置。因此,让我们带您完成整个过程。
Docker 是一个容器化平台,用于将您的应用程序打包成一个易于管理的容器映像。
先决条件
您必须满足以下要求才能完成本教程:
Docker 应该已安装并在您的系统上本地运行。

您需要一个 root 帐户,或者用户可以运行 sudo 命令。

在 Docker 中设置 Nginx
拉取镜像
首先,我们将拉取官方的 Nginx 镜像。在您的 docker 主机上,在终端上运行以下 Docker pull 命令以从 Docker hub 下载 Nginx 最新镜像。

linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker pull nginx

输出如下:

Using default tag: latest
latest: Pulling from library/nginx
e1acddbe380c: Pull complete
e21006f71c6f: Pull complete
f3341cc17e58: Pull complete
2a53fa598ee2: Pull complete
12455f71a9b5: Pull complete
b86f2ba62d17: Pull complete
Digest: sha256:4d4d96ac750af48c6a551d757c1cbfc071692309b491b70b2b8976e102dd3fef
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

运行 Nginx Docker 容器
现在,我们已准备好运行 Nginx Docker 容器并将其端口公开给您的本地网络。为此,我们使用以下命令运行镜像:

linuxmi@linuxmi:~/www.linuxmi.com$ docker run -d -p 80:80 --name my-nginx-server nginx

输出如下:
f204ea685629dbc1d09b4a2d5f6fb64f5ef84be7d58a1b7449cc144c65c90c92
docker: Error response from daemon: driver failed programming external connectivity on endpoint my-nginx-server (27d91a249b151ea87841c46775647d7af43d12c3e753061531173f05016e485b): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use.

-d – 以分离模式启动容器(容器在后台运行)。

-p – 将一个端口从容器绑定到主机(将主机流量端口 80 路由到容器端口 80)。

-name – 我们的 Docker 容器的名称。

最后一个参数 “nginx” 告诉 Docker 容器使用哪个镜像。

现在打开浏览器访问 http://localhost,您应该会看到一个 Nginx Web 服务器提供其默认网页。

就是这样。你有一个 NGINX 的工作实例,通过 Docker 容器。

列出 Docker 容器
要列出所有正在运行的 Docker 容器,请执行以下命令:

linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker container ls -all

根据上面的输出,我们可以使用以下两种方法的其中一种停止我们的 Nginx Docker 容器:

linuxmi@linuxmi:~/www.linuxmi.com$ docker stop f204ea685629
f204ea685629
linuxmi@linuxmi:~/www.linuxmi.com$ docker stop my-nginx-server
my-nginx-server

要查看所有容器,甚至那些未运行的容器,您需要添加 -a 标志。

linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker container ls -a

在 Nginx Docker 容器和主机之间共享数据
Docker 容器是短暂的。默认情况下,在容器内创建的任何数据仅在容器内且仅在容器运行时可用。

因此,让我们向您展示如何在主机上访问容器内部的数据。我们的目标是创建一个简单的 HTML 文件,将其托管在容器中,并使用 Nginx Docker 容器将其提供给外部。此设置允许我们拥有在容器外部托管的持久网站内容。

为了实现这个功能,我们将使用 Docker 中的绑定挂载功能。使用绑定挂载时,主机上的文件或目录会挂载到容器中。

因此,让我们首先在主目录中为您的网站内容创建一个新目录。

linuxmi@linuxmi:~/www.linuxmi.com$ mkdir ~/www

现在让我们创建一个简单的 HTML 文件并在您的索引页面上放置一些文本。

linuxmi@linuxmi:~/www.linuxmi.com$ vim ~/www/index.html

编写 HTML 代码片段到里面。保存文件并退出 Vim。

接下来,我们将在容器上运行带有附加卷的 Nginx Docker 容器 /usr/share/nginx/html 到当前保存文件的主机 www 目录上 index.html。

linuxmi@linuxmi:~/www.linuxmi.com$ docker run -d -p 80:80 -v ~/www:/usr/share/nginx/html/ --name my-nginx-server nginx

Nginx 容器默认设置为在 /usr/share/nginx/html/. 在上面的命令中,该 - v 选项设置了一个绑定挂载卷,它将 Nginx Docker 容器内部的目录链接 到 主机上的目录。/usr/share/nginx/html/~/www

Docker 使用 a : 将主机路径与容器路径分开。主机路径始终排在第一位。

现在,如果您浏览 http://localhost,您将在显示窗口上看到下面给出的输出。

就这样。您现在有一个正在运行的 Nginx Docker 容器,它为自定义网页提供服务。

结论
Nginx 和 Docker 可以很好地协同工作。在本教程中,我们演示了如何设置和使用 Nginx Docker 容器。现在,您还知道如何在容器和主机文件系统之间共享信息。

如有疑问,请留下您的意见。

Docker-如何在postgres容器中运行psql命令?

Docker-如何在postgres容器中运行psql命令?

我想在postgres映像中使用psql以便在数据库上运行一些查询。但是不幸的是,当我连接到postgres容器时,出现了该错误,找不到psql命令…

对我来说,如何在容器中运行postgre sql查询或命令是一个谜。

如何在postgres容器中运行psql命令?(我是Docker世界中的新手)

我使用Ubuntu作为主机,但没有在主机上安装postgres,而是使用postgres容器。

docker-compose ps        Name                       Command               State               Ports            ---------------------------------------------------------------------------------------------yiialkalmi_app_1        /bin/bash                        Exit 0                               yiialkalmi_nginx_1      nginx -g daemon off;             Up       443/tcp, 0.0.0.0:80->80/tcp yiialkalmi_php_1        php-fpm                          Up       9000/tcp                    yiialkalmi_postgres_1   /docker-entrypoint.sh postgres   Up       5432/tcp                    yiialkalmi_redis_1      docker-entrypoint.sh redis ...   Up       6379/tcp

这里的容器:

docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES315567db2dff        yiialkalmi_nginx    "nginx -g ''daemon off"   18 hours ago        Up 3 hours          0.0.0.0:80->80/tcp, 443/tcp   yiialkalmi_nginx_153577722df71        yiialkalmi_php      "php-fpm"                18 hours ago        Up 3 hours          9000/tcp                      yiialkalmi_php_140e39bd0329a        postgres:latest     "/docker-entrypoint.s"   18 hours ago        Up 3 hours          5432/tcp                      yiialkalmi_postgres_15cc47477b72d        redis:latest        "docker-entrypoint.sh"   19 hours ago        Up 3 hours          6379/tcp                      yiialkalmi_redis_1

这是我的docker-compose.yml:

app:image: ubuntu:16.04volumes:    - .:/var/www/htmlnginx:    build: ./docker/nginx/    ports:        - 80:80    links:        - php    volumes_from:        - app    volumes:        - ./docker/nginx/conf.d:/etc/nginx/conf.dphp:    build: ./docker/php/    expose:        - 9000    links:        - postgres        - redis    volumes_from:        - apppostgres:    image: postgres:latest    volumes:        - /var/lib/postgres    environment:        POSTGRES_DB: project        POSTGRES_USER: project        POSTGRES_PASSWORD: projectredis:    image: redis:latest    expose:        - 6379

答案1

小编典典
docker exec -it yiialkalmi_postgres_1 psql -U project -W project project

一些解释

  • docker exec -it 用于对正在运行的容器运行命令的命令。这些it标志打开一个交互式tty。基本上它将导致连接到终端。如果您想打开bash终端,可以执行此操作

docker exec -it yiialkalmi_postgres_1 bash

  • yiialkalmi_postgres_1 容器名称(您可以改用容器ID,在您的情况下为40e39bd0329a
  • psql -U project -W project 对正在运行的容器执行的命令

  • U 用户

  • W 密码

  • project 您要连接的数据库。

这些是您在这里指定的

environment:    POSTGRES_DB: project    POSTGRES_USER: project    POSTGRES_PASSWORD: project

linux – 在Docker容器中运行预定的cron作业的解决方案?

linux – 在Docker容器中运行预定的cron作业的解决方案?

我有一个Docker容器,我安装了我的Python工具,包括我的luigi管道接口.我想运行一个shell脚本,它使用cron每周启动我的luigi管道.

我尝试过高低,让cron在Docker容器中工作.在我的生活中,我不能让我的crontab -e文件运行.

在我的档案中,我有:

0 0 * * Sun /data/myscript.sh

接着是一条新线. Cron正在后台运行 – ps aux | grep cron显示/usr/sbin / cron正在运行.此外,在我的/ var / log / syslog文件中,我有:

/ USR / SBIN / CRON [2037]

linux – 如何在docker容器中运行cron作业

linux – 如何在docker容器中运行cron作业

我试图在docker容器中运行一个cron作业

但没有什么对我有用

我的容器只有cron.daily和cron.weekly文件

crontab,cron.d,cron.hourly ……在我的容器中不存在

crontab -e也无法正常工作

我的容器用/ bin / bash运行

解决方法:

这是我如何运行我的一个cron容器.

Dockerfile:

FROM alpine:3.3

ADD crontab.txt /crontab.txt
ADD script.sh /script.sh
copY entry.sh /entry.sh
RUN chmod 755 /script.sh /entry.sh
RUN /usr/bin/crontab /crontab.txt

CMD ["/entry.sh"]

crontab.txt

*/30 * * * * /script.sh >> /var/log/script.log

entry.sh

#!/bin/sh

# start cron
/usr/sbin/crond -f -l 8

script.sh

#!/bin/sh

# code goes here.
echo "This is a script, run by cron!"

像这样构建

docker build -t mycron .

像这样跑

docker run -d mycron

添加自己的脚本并编辑crontab.txt,然后构建映像并运行.由于它是基于高山,因此图像非常小.

关于如何在 docker 容器中运行 cron 作业?docker crontab的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于5 分钟教程:如何在 Docker 容器中运行 Nginx、Docker-如何在postgres容器中运行psql命令?、linux – 在Docker容器中运行预定的cron作业的解决方案?、linux – 如何在docker容器中运行cron作业的相关知识,请在本站寻找。

本文标签: