无法使用 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

现在似乎一切正常。