简体   繁体   中英

Starting Docker PHP server using CMD makes the host recieve "Connection reset by peer" upon connecting

I have a PHP server that I need to launch in a docker image along a Python service. Both of them need to be in the same image. At first, I wrote the Dockerfile to start the PHP server, by following a simple guide I found online, and I came up with this:

FROM php:7-apache
COPY ./www/ /var/www/html
WORKDIR /var/www/html
EXPOSE 70

Then, because I need a third service running on a second container, I created the following docker-compose file:

version: '3.3'

services:
  web:
    build: .
    image: my-web
    ports:
      - "70:80"
  secondary-service:
    image: my-service
    ports:
      - "8888:8888"

Using only that, the website works just fine (except for the missing service on the web container). However, if I want to start a service inside the web container alongside the web, I need to start the website manually from a bash script, since docker can only have one CMD entry. This is what I tried:

FROM php:7-apache
COPY ./www/ /var/www/html
RUN mkdir "/other_service"
COPY ./other_service /other_service
RUN apt-get update && bash /other_service/install_dependenci172.17.0.1es.sh
WORKDIR /var/www/html
EXPOSE 70
CMD ["bash", "/var/www/html/launch.sh"]

And this is launch.sh :

#!/bin/bash

(cd /other_service && python3 /other_service/start.py &) # CWD needs to be /other_service/
php -S 0.0.0.0:70 -t /var/www/html

And that also starts the server without problems, along with other_service . However, when I go to my browser (in the host) and browse to http://localhost:70 , I get the error "Connection reset". The same happens when I try to do a request using curl localhost:70 , which results in curl: (56) Recv failure: Connection reset by peer .

I can see in the log of the web that the php test server is running:

PHP 7.4.30 Development Server (http://0.0.0.0:70) started

And if I open a shell inside the container and I run the curl command inside of it, it gets the webpage without any problems.

I have been searching similar questions around, but none if them had an answer, and the ones that did didn't work.

What is going on? Shouldn't manually starting the server from a bash script work just fine?

Edit: I've just tried to only start the PHP server like below and it doesn't let me connect to the webpage either

#!/bin/bash

#(cd /other_service && python3 /other_service/start.py &) # CWD needs to be /other_service/
php -S 0.0.0.0:70 -t /var/www/html

I found the issue. It was as easy as starting the Apache server too:

#!/bin/bash

(cd /other_service && python3 /other_service/start.py &) # CWD needs to be /other_service/
/etc/init.d/apache2 start
php -S 0.0.0.0:70 -t /var/www/html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM