如何调试REDIS,APACHE发布Docker容器?

如何调试REDIS,APACHE发布Docker容器?,apache,debugging,docker,redis,Apache,Debugging,Docker,Redis,这是一个场景: 容器来自使用以下Dockerfile创建的图像: FROM php:5-apache RUN apachectl -M RUN a2enmod rewrite RUN a2enmod expires RUN service apache2 restart RUN apachectl -M RUN php -m RUN apt-get update RUN php -m RUN apt-get install -y php5-redis RUN apt-get install

这是一个场景:

容器来自使用以下Dockerfile创建的图像:

FROM php:5-apache


RUN apachectl -M
RUN a2enmod rewrite
RUN a2enmod expires
RUN service apache2 restart
RUN apachectl -M

RUN php -m
RUN apt-get update
RUN php -m
RUN apt-get install -y php5-redis
RUN apt-get install -y redis-server
#RUN redis-server
RUN cp /etc/php5/mods-available/redis.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/redis.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/redis.so
RUN php -m



COPY src/ /var/www/html
EXPOSE 80

#CMD ["redis-server"]
请注意最后一行
CMD[“redis server”]

在构建图像之后,我创建了如下容器

docker run -p 80:80 my_img
如果图像是在浏览器(0.0.0.0:80)中使用
#CMD[“redis server”]
构建的,我会收到一条错误消息(来自我的
index.php
文件)
“无法连接到redis”
。可能是因为REDIS没有初始化

如果图像是使用
CMD[“redis server”]
构建的,并且初始化了redis(我可以在docker终端中看到redis符号),但我在浏览器中收到一条错误消息:

所以,我不知道发生了什么。我是Docker的新手,不知道如何调试它。它可能与端口冲突(REDISxApache)有关,也可能与REDIS本身有关。或者这不是我初始化REDIS的方式


有什么帮助吗

您不能在同一容器中运行依赖服务。您可以将它们作为compose的一部分运行

docker compose.yml

version: '3'
services:
  php:
    build: 
      context: .
    ports:
      - "80:80"
  redis:
    image: redis
你将用英语写出这篇作文

$ docker-compose up 
您必须在php代码中的地址
redis:6379
连接到redis,而不是使用
127.0.0.1:6379

有关docker compose的更多详细信息,请参阅您不在同一容器中运行依赖服务。您可以将它们作为compose的一部分运行

docker compose.yml

version: '3'
services:
  php:
    build: 
      context: .
    ports:
      - "80:80"
  redis:
    image: redis
你将用英语写出这篇作文

$ docker-compose up 
您必须在php代码中的地址
redis:6379
连接到redis,而不是使用
127.0.0.1:6379

有关docker compose的更多详细信息,请参阅

ok@Tarun我有这个想法,但我是docker的新手。那么,我应该创建一个名为docker-composer.yml的新文件并将其保存在dockerfile的同一目录中吗?然后在运行我的图像后,我应该打开另一个终端并运行将创建另一个容器的
$docker compose up
。。。正确吗?这是我得到的
docker compose up错误:在文件'./docker compose.yml'中,服务'verison'必须是映射而不是字符串。
。很抱歉,它应该是
version
,而不是
verison
端口<代码>创建mv_php_1。。。错误错误:对于mv_php_1无法启动服务php:驱动程序未能在端点mv_php_1上编程外部连接(5BB67D3448D0正在创建mv_redis_1…完成错误:对于php无法启动服务php:驱动程序未能在端点mv_php_1上编程外部连接(5BB67D3448D080BBF0B74A88F997189028FAFCDC445AAF5C7DFCBBE6DAD983):0.0.0.0:80绑定失败:端口已分配错误:在启动项目时遇到错误。。也许我应该在Dockerfile中设置ServerName。这意味着您的机器的端口80上已经在运行某些东西了ok@Tarun我知道了,但我是docker的新手。那么,我应该创建一个名为docker-composer.yml a的新文件吗然后在运行我的映像后,我应该打开另一个终端并运行
$docker compose up
,它将创建另一个容器…正确吗?这是我得到的
docker compose up错误:在文件'./docker compose.yml'中,服务'verison'必须是一个映射,而不是一个字符串。
。抱歉,应该是这样的be
version
而不是
verison
端口。
创建mv_php_1…错误:对于mv_php_1,无法启动服务php:驱动程序无法在端点mv_php_1上编程外部连接(5BB67D3448D0正在创建mv_redis_1…完成错误:对于php无法启动服务php:驱动程序未能在端点mv_php_1上编程外部连接(5bb67d3448d080bbf0b74a7a88f997189028fafcdc445aaf5c7dfcbbe6dad983):0.0.0.0:80的绑定失败:端口已分配错误:在启动项目时遇到错误。
。也许我应该在Dockerfile中设置ServerName。。这意味着您的计算机的端口80上已在运行某些内容