问题DockerPHP-Redis与healthcheck

The problem Docker PHP-Redis and healthcheck

我有两个服务。 Redis 和 PHP。如何让 php 等待 redis 的启动并写关于 it.I 尝试使用 healthcheck-s 但显然我没有正确设置它。

docker-compose.yml

version: '2'
services:
  php:
    build:
      context: docker/web
      dockerfile: Dockerfile-php-7.0
    container_name: php
    ports:
      - "8280:80"
    links:
      - redis:redis
  redis:
     build: docker/cache
     container_name: redis

Dockerfile-php-7.0

FROM php:7.0
RUN pecl install redis \
&& docker-php-ext-enable redis
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./index.php"]
EXPOSE 80


 index.php    
                                                                                  
<?php
echo 'Starting';
$redis = new Redis();
$redis->connect(getenv('host'), getenv('6379'));
var_dump($redis->incr('foo'));
?>

Docker 文件

FROM redis:3.2-alpine
COPY conf/redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
EXPOSE 6379

别怕骂我。我才刚刚开始学习docker。 如果有任何帮助,我将不胜感激!!!

这是您可以使用的 docker-compose.yml 文件:

version: '2.1'
services:
  php:
    build:
      context: docker/web
      dockerfile: Dockerfile-php-7.0
    container_name: php
    ports:
      - "8280:80"
    depends_on:
      redis:
        condition: service_healthy
  redis:
    build: docker/cache
    container_name: redis
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s

我还更改了 PHP 脚本 (index.php),如下所示:

<?php
echo 'Starting';
$redis = new Redis();
$redis->connect('redis', '6379');
var_dump($redis->incr('foo'));

现在整个堆栈都可以在我的机器上运行了。我可以从 php.

连接 redis 容器

php 容器日志显示如下

docker logs -f php
Startingint(1)