在python docker中启动php



我对这个docker-compose有问题

version: '3'
services:
app:
image: php:7
command: php -S 0.0.0.0:8000 /app/get_count_of_day.php
ports:
- "8000:8000"
volumes:
- .:/app
composer:
restart: 'no'
image: composer/composer:php7
command: install
volumes:
- .:/app
python:
image: python:3
command: bash -c "pip3 install -r /app/requirements.txt && celery worker -l info -A cron --beat --workdir=/app/python"
links:
- redis
volumes:
- .:/app
depends_on:
- app
redis:
image: 'redis:3.0-alpine'
command: redis-server
ports:
- "6379:6379"

我的芹菜任务

import os

from celery import Celery
from celery.schedules import crontab
os.chdir("..")
app = Celery(broker='redis://redis:6379/0')
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
sender.add_periodic_task(10.0, run_cron.s(), name='add every 10')
@app.task
def run_cron():
os.system("/usr/local/bin/php index.php")

我的错误是找不到php

python_1    | sh: 1: /usr/local/bin/php: not found
python_1    | [2018-06-15 15:08:29,491: INFO/ForkPoolWorker-2] Task cron.run_cron[e7c338c1-7b9c-4d6f-b607-f4e354fbd623] succeeded in

0.003908602000592509s:无 python_1 |[2018-06-15 15:08:39,487: 信息/节拍]计划程序:发送到期任务每 10 (cron.run_cron( 添加一次

但是如果我手动去码头工人

docker exec -i -t 1ff/bin/bash

我在目录中找到了 php

来自容器"app"的二进制文件不会在容器"python"中公开,这是docker的MO。要运行index.php脚本,您可以通过http request打开此页面:curl http://app/index.php或通过urllib2requests完全在python中执行相同的操作(我推荐最后一个选项(。

但是,如果您的请求因找不到app域而失败 - 下面的原始答案是您的解决方案。

如果您必须在app容器内执行更复杂的操作,您应该真正考虑通过内部 API 或类似的东西公开它们,但据我了解,docker 容器应该做一件事,而且只做一件事。如果你需要在 php 容器中运行一些复杂的 shell 脚本 - 你正在打破这个原则。app容器用于提供 php 页面,所以它应该这样做。

作为最后的手段,您可以完全破解 docker,例如在芹菜容器内公开 docker 控制套接字并直接向其他容器发出命令。这可能非常危险,并且在文档中非常不鼓励,但你;)

[编辑:最初误读的问题...]

在默认 docker 网络中,不能按名称对容器进行寻址。加

networks:
my-net:

到 docker-compose 和

networks:
- my-net

到每个需要相互通信的容器。

相关内容

  • 没有找到相关文章