【发布时间】:2020-04-16 22:41:48
【问题描述】:
我正在尝试学习 docker,这是我无法理解的。我试图在单独的容器中设置 apache2 和 php(fpm)。我的文件夹结构是这样的
.
├── apache
| ├── dockerfile
| └── demo.apache.conf
├── php
| ├── dockerfile
| └── www.conf
├── public_html
| ├── index.php
| └── test.html
└── docker-compose.yml
这是我的 apache docker 文件
FROM ubuntu
RUN ["apt-get","update"]
RUN ["apt-get","install","apache2","-y"]
RUN apache2ctl start
RUN a2enmod proxy_fcgi
COPY demo.apache.conf /etc/apache2/sites-available/000-default.conf
VOLUME /etc/apache2/
EXPOSE 80
ENTRYPOINT apache2ctl start && tail -f /dev/null
和 PHP docker 文件
FROM ubuntu
RUN ["apt-get","update"]
RUN apt-get install php7.2-fpm php7.2-mysql php7.2-mbstring php7.2-curl php7.2-dom -y
EXPOSE 9000
COPY www.conf /etc/php/7.2/fpm/pool.d/www.conf
ENTRYPOINT service php7.2-fpm start && tail -f /dev/null
还有 docker-compose.yml 文件
version: "3.2"
services:
php:
build: './php/'
networks:
- backend
volumes:
- ./public_html/:/var/www/html/
apache:
build: './apache/'
depends_on:
- php
networks:
- backend
ports:
- "8080:80"
volumes:
- ./public_html/:/var/www/html/
networks:
backend:
当我使用
运行它时docker-compose up -d
我可以在 localhost:8080 访问 index.php(和 test.html)。但是,如果我尝试分别为两个 docker 文件创建图像并使用这样的运行命令创建容器
docker build -t apache2 .
docker build -t phptest .
docker run -d -v /home/user/Desktop/DockerTesting/public_html:/var/www/html -p 100:80 --name apachecontainer apache2
docker run -d -v /home/user/Desktop/DockerTesting/public_html:/var/www/html -p 9000:9000 --name phpcontainer phptest
当我尝试访问 localhost:100 时出现以下错误
代理错误 代理服务器收到来自上游服务器的无效响应。
代理服务器无法处理请求
原因:DNS 查找失败:php
但是我可以在 localhost:100/test.html 访问 html 文件
我怀疑 docker-compose 文件中定义的后端网络可能是关键。因此,我尝试创建一个新网络并将两个容器都添加到其中并将其与默认桥接网络断开连接,但它不起作用。为什么不在这里手动创建两个单独的容器不起作用?我究竟做错了什么?我该如何解决它
更新 1:我还尝试使用
创建图像docker build -t apache2 。 docker build -t phptest .
并且在 docker compose 中使用 image: "phptest" 和 image: "apache2" 而不是构建命令,它可以工作。但是如果我使用上面提到的 docker run 命令创建具有相同图像的容器,它就不起作用
更新2:我使用了here使用的demo.apache.conf@
【问题讨论】:
标签: docker docker-compose apache2 fastcgi php-7.2