Docker – WordPress Docker container redirects the request from port 8000 to 80

dockerWordpress

I'm trying to move my wordpress blog from a hoster to my own server. I wanted to use docker for that task.

On my server runs nginx which hosts a number of services not relevant to this question. I use the following script to create a container.

#!/bin/bash

docker create --name blog \
--net bridge \
-e WORDPRESS_DB_HOST=192.168.170.11 \
-e WORDPRESS_DB_USER=USER \
-e WORDPRESS_DB_PASSWORD=PASSWORD \
-e WORDPRESS_DB_NAME=wordpress \
-v /var/www/wordpress:/var/www/html \
-p 8000:80 \
wordpress

The DB connection works and apache2 is running. But I can't access wordpress.

When I try to access localhost:8000, is redirects me to port 80 where nginx is listening. Why? I want to connect to port 80 (apache2) inside the container.

Same when I try this from outside (if firewall down).

Another problem is the firewall: port 8000/tcp is open for all IPs but my requests from outside are still blocked. What do I have to open for this docker container?

Running Docker version 17.05.0-ce, build 89658be on Debian Stretch.

Edit:

root@server:~/docker# curl -v http://localhost:8000
* Rebuilt URL to: http://localhost:8000/
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8000 (#0)
> GET / HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Date: Mon, 12 Feb 2018 20:08:48 GMT
< Server: Apache/2.4.25 (Debian)
< X-Powered-By: PHP/7.2.1
< Set-Cookie: PHPSESSID=b03c4c1ba164bef366c49e1b1b5abc1c; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Pragma: no-cache
< Set-Cookie: PHPSESSID=7293f22e5c860504a429b070d0ad21e4; path=/
< Location: http://localhost/
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
< 
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact

I have no glue whats forwarding me here. The Apache2 is inside docker. There is no .htaccess file and I did not modify the image.

Best Answer

For a minute stop your nginx, run this container with docker run -p 80:80 [...]. Then your browser will be able to access http://localhost/wp-admin/; there should be a property called something like "Site URL". Change it to http://localhost:8000/ and save.

This will cause Wordpress to redirect (it will use HTTP 301) any visitor to http://localhost:8000/ whether or not the Apache is listening on that port.

Then docker commit your customization, and run the committed image with docker run -p 8000:80 [...]

Related Topic