質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.34%
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

1回答

199閲覧

docker環境上でのcronを正しく実行できない

tetatail-sh10

総合スコア0

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2025/01/13 16:10

編集2025/01/13 16:19

実現したいこと

Docker環境上でcronコンテナを立てたときのcrontabを正しく設定したい。

bash

1$ ls -R 2.: 3cron/ docker/ docker-compose.yml README.md src/ 4 5./cron: 6cronjob.sh Dockerfile 7 8./docker: 9Dockerfile requirements.txt 10 11./src: 12apply.py commannd/ log/ login/ reapply.py scraping.py url/ 13 14./src/commannd: 15delete_log.bat 16 17./src/log: 18apply/ reapply/ 19 20./src/log/apply: 21 22./src/log/reapply: 23 24./src/login: 25login-instance-1.txt login-instance-2.txt 26 27./src/url: 28url_list_1.txt url_list_2.txt

Dockerfile

1# ./cron 2# ベースイメージとして debian を使用 3FROM debian:bullseye 4 5# 必要なパッケージをインストール 6RUN apt-get update && apt-get install -y \ 7 cron \ 8 docker.io \ 9 && rm -rf /var/lib/apt/lists/* 10 11 12# cronjob.sh をコンテナ内にコピー 13COPY cronjob.sh /etc/cron.d/cronjob 14 15# cron ジョブを設定 16RUN chmod 0644 /etc/cron.d/cronjob && \ 17 crontab /etc/cron.d/cronjob 18 19# cron を実行 20CMD ["cron", "-f"]

Dockerfile

1# ./docker 2FROM python:3.9-slim 3 4# 作業ディレクトリを指定 5WORKDIR /app/src/ 6 7# 必要なファイルをコピー 8COPY ./requirements.txt /app/src/ 9 10# Pythonパッケージをインストール 11RUN pip install -r requirements.txt 12 13# 必要なパッケージをインストール 14RUN apt-get update && apt-get install -y \ 15 wget \ 16 curl \ 17 unzip \ 18 ca-certificates \ 19 libx11-dev \ 20 libxext6 \ 21 libxrender-dev \ 22 libgbm-dev \ 23 libnss3 \ 24 libatk-bridge2.0-0 \ 25 libatk1.0-0 \ 26 libgtk-3-0 \ 27 libasound2 \ 28 xvfb \ 29 && rm -rf /var/lib/apt/lists/* 30 31# Xvfb(仮想ディスプレイ)を実行する必要がある場合 32RUN apt-get update && apt-get install -y \ 33 x11vnc \ 34 && rm -rf /var/lib/apt/lists/* 35 36# コンテナが終了しないようにする(デフォルトの動作) 37CMD ["tail", "-f", "/dev/null"]

docker

1# version: '3' 2services: 3 selenium-1: 4 image: selenium/standalone-chrome:129.0 5 container_name: selenium-1 6 ports: 7 - 4444:4444 8 - 7901:7900 9 shm_size: '2gb' 10 restart: always 11 12 selenium-2: 13 image: selenium/standalone-chrome:129.0 14 container_name: selenium-2 15 ports: 16 - 4445:4444 # Selenium サーバー 2 (HTTP) 17 - 7902:7900 # VNC サーバー 2 (ポート 7902) 18 shm_size: '2gb' 19 restart: always 20 21 auto-apply-1: 22 build: ./docker 23 container_name: auto-apply-1 24 depends_on: 25 - selenium-1 26 volumes: 27 - ./src:/app/src 28 environment: 29 - SELENIUM_URL=http://selenium-1:4444/wd/hub 30 - INSTANCE_ID=1 31 shm_size: '2gb' 32 33 auto-apply-2: 34 build: ./docker 35 container_name: auto-apply-2 36 depends_on: 37 - selenium-2 38 volumes: 39 - ./src:/app/src 40 environment: 41 - SELENIUM_URL=http://selenium-2:4444/wd/hub 42 - INSTANCE_ID=2 43 shm_size: '2gb' 44 45 cron: 46 build: ./cron 47 container_name: cron 48 depends_on: 49 - auto-apply-1 50 - auto-apply-2 51 volumes: 52 - ./src:/app/src 53 - /var/run/docker.sock:/var/run/docker.sock 54 restart: always

発生している問題・分からないこと

Docker環境上のcronが実行されない。
正しい記述の仕方がわからない。

該当のソースコード

sh

1# cronjob.sh 2# === 土曜~木曜 === 315 15 * * 6,0,1,2,3,4 docker exec auto-apply-1 python3 /app/src/apply.py 452 15 * * 6,0,1,2,3,4 docker exec auto-apply-1 python3 /app/src/apply.py 515 6 * * 6,0,1,2,3,4 docker exec auto-apply-2 python3 /app/src/apply.py 6# 05:00に実行 700 20 * * 6,0,1,2,3,4 docker exec auto-apply-1 python3 /app/src/reapply.py 800 20 * * 6,0,1,2,3,4 docker exec auto-apply-2 python3 /app/src/reapply.py 9# 12:00に実行 1000 3 * * 6,0,1,2,3,4 docker exec auto-apply-1 python3 /app/src/reapply.py 1100 3 * * 6,0,1,2,3,4 docker exec auto-apply-2 python3 /app/src/reapply.py 12# === 金曜 === 1330 3 * * 5 docker exec auto-apply-1 python3 /app/src/scraping.py 1430 3 * * 5 docker exec auto-apply-2 python3 /app/src/scraping.py 15# 14:00に実行 1600 5 * * 5 docker exec auto-apply-1 python3 /app/src/apply.py 1700 5 * * 5 docker exec auto-apply-2 python3 /app/src/apply.py 18# 18:00に実行 1900 9 * * 5 docker exec auto-apply-1 python3 /app/src/reapply.py 2000 9 * * 5 docker exec auto-apply-2 python3 /app/src/reapply.py 21# 21:00に実行 2200 12 * * 5 docker exec auto-apply-1 python3 /app/src/reapply.py 2300 12 * * 5 docker exec auto-apply-2 python3 /app/src/reapply.py

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

・すべてのコンテナのタイムゾーンを東京にしてcrontab.shを日本時間に合わせたがそれでも指定時間にプログラムが起動しない
・shファイルに書かれてるpythonを起動するコマンドが正しく実行されることをcronコンテナのbashで確認済み
・cronサービスは実行中であることを確認済み

root@fb47786fa9d3:/# service cron status cron is running.

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syoshinsya-

2025/01/13 23:47

質問タイトルは「docker環境上でのcronを正しく実行できない」となっていますが、「上記の詳細・結果」には「shファイルに書かれてるpythonを起動するコマンドが正しく実行されることをcronコンテナのbashで確認済み」、「cronサービスは実行中であることを確認済み」と記載があります。 質問の本質は、コンテナ内から別コンテナのコマンド実行を行いたいということでしょうか
syoshinsya-

2025/01/14 07:11

コンテナ内で直接「docker exec」コマンドを実行した際のログなどありましたら記載をお願いします
tetatail-sh10

2025/01/14 09:28 編集

```bash PS C:\auto-apply> docker compose exec auto-apply-1 bash root@cffe24cc3276:/app/src# python3 apply.py ユーザー: 〇〇〇@gmail.com タブ名: 「{名前}」{店名} - {地域}|{某風俗サイト} →→→既にボタンを押下済みです。 ``` ```bash PS C:\auto-apply> docker compose exec cron bash root@cf44adeba01b:/# docker exec auto-apply-2 python3 /app/src/apply.py ユーザー: 〇〇〇@gmail.com タブ名: 「{名前}」{店名} - {地域}|{某風俗サイト} →→→ボタンを押下しました。 ``` プログラムの内容は某風俗サイトの無料券の自動応募プログラムです。 cron, auto-apply-1,2コンテナともに正しくbashで表示されているログと同等なログファイルが作成されます。
guest

回答1

0

コンテナ内から別のコンテナへ docker exec するには
docker.sock をコンテナにマウントしてあげるとできるようです
(セキュリティー上あんまりよろしくないですが )

ご参考まで
https://qiita.com/ymktmk/items/d32f696070490d90d218#dooddocker-outside-of-docker
https://www.altus5.co.jp/blog/docker/2017/01/07/docker-in-docker/

投稿2025/01/15 07:51

satoshih

総合スコア805

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.34%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問