无法使用 docker 运行 命令 link ubuntu-apache 容器与 ubuntu-php 容器
Unable to link an ubuntu-apache container with ubuntu-php container using the docker run command
我正在努力学习 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
和PHPdocker文件
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 组合中使用了 图像:"phptest" 和 图像:"apache2"而不是构建命令并且它有效。但是如果我使用上面提到的 docker 运行 命令
创建具有相同图像的容器,它就不起作用
更新 2: 我使用了 demo.apache.conf 使用了 here
我解决了这个问题。我使用 docker container inspect 命令检查四个容器,其中两个是用 docker 运行[=18= 创建的] 命令和使用 docker-compose up -d 命令创建的两个。在比较它们时发现,使用 docker-compose 命令创建的两个容器都有一个网络别名,而 php 容器没有映射暴露的端口 9000。所以我改变了我的命令和 运行以下
docker network create testnet
docker run -d -v /home/user/Desktop/DockerTesting/public_html:/var/www/html --network testnet --network-alias php --name phpcontainer phptest
docker run -d -v /home/user/Desktop/DockerTesting/public_html:/var/www/html -p 100:80 --network testnet --network-alias apache --name apachecontainer apache2
现在似乎一切正常。
我正在努力学习 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
和PHPdocker文件
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 组合中使用了 图像:"phptest" 和 图像:"apache2"而不是构建命令并且它有效。但是如果我使用上面提到的 docker 运行 命令
创建具有相同图像的容器,它就不起作用更新 2: 我使用了 demo.apache.conf 使用了 here
我解决了这个问题。我使用 docker container inspect 命令检查四个容器,其中两个是用 docker 运行[=18= 创建的] 命令和使用 docker-compose up -d 命令创建的两个。在比较它们时发现,使用 docker-compose 命令创建的两个容器都有一个网络别名,而 php 容器没有映射暴露的端口 9000。所以我改变了我的命令和 运行以下
docker network create testnet
docker run -d -v /home/user/Desktop/DockerTesting/public_html:/var/www/html --network testnet --network-alias php --name phpcontainer phptest
docker run -d -v /home/user/Desktop/DockerTesting/public_html:/var/www/html -p 100:80 --network testnet --network-alias apache --name apachecontainer apache2
现在似乎一切正常。