【问题标题】:Unable to link an ubuntu-apache container with ubuntu-php container using the docker run command无法使用 docker run 命令将 ubuntu-apache 容器与 ubuntu-php 容器链接
【发布时间】: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


    【解决方案1】:

    我解决了这个问题。我使用 docker container inspect 命令检查了四个容器,两个使用 docker run 命令创建,两个使用 docker-compose up -d 创建强>命令。在比较它们时发现,使用 docker-compose 命令创建的两个容器都有一个网络别名,而 php 容器没有映射暴露的端口 9000。所以我更改了命令并运行以下命令

    docker 网络创建测试网

    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

    现在一切似乎都正常了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 2016-09-01
      • 2015-10-07
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 2017-01-03
      相关资源
      最近更新 更多