Manage NGINX configurations inside Docker container
Tags: docker, nginx, proxy
Published: 2021-11-11 12:15:06

---
title: Manage NGINX configurations inside Docker container
published: true
description: Simple example that will help you configure or investigate your NGINX docker container with configuration change on the fly.
tags: docker, nginx, proxy
cover_image: https://miro.medium.com/max/875/1*zCDG9Zihu5hsDJj82X1nyQ.png
---

Originaly posted [here](https://kutsyk.medium.com/manage-nginx-configurations-inside-docker-container-2da58cd782b6)

I believe in any product there is a time when you have to configure a proxy server. Will it be to expose UI applications or just redirect requests to different APIs it depends, but time will come. I’ve made a simple example that will help you configure or investigate your NGINX docker container with configuration change on the fly.

Don’t do this in your production environment.

---

For the beginning, we need to understand how our NGINX docker image looks like.

**Dockerfile**

```
FROM nginx:stable-alpine
RUN rm -rf /usr/share/nginx/html/*
COPY ./dist/app /usr/share/nginx/html
```

In the same directory that you created your Dockerfile, create folders directory **dist/app** and put some dummy **index.html**

Here is an example of **index.html**:
````
<!DOCTYPE html>
<html>
<body>
<h2>An Unordered HTML List</h2>
<ul>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>
<h2>An Ordered HTML List</h2>
<ol>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ol>
</body>
</html>
```

Build your image:

`docker build -t nginx:latest .`

As the result, you should have your image ready to be started:
```
REPOSITORY          TAG                 IMAGE ID            
nginx               latest              .....
```

Run your docker image:
`docker run -d -p 8080:80 nginx`

Validate that everything is working smooth:
```
test-vm@vm-test:~/dockertest$ curl http://localhost:8080
<!DOCTYPE html>
<html>
<body>
<h2>An Unordered HTML List</h2>
<ul>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>
<h2>An Ordered HTML List</h2>
<ol>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ol>
</body>
</html>
```

Now you should enter into your container, to do that get a container id.
```
test-vm@vm-test:~/dockertest$ docker ps
CONTAINER ID   IMAGE  COMMAND  CREATED   STATUS  PORTS     NAMES                           
022c55a80088   nginx  "/d.…"   7 m ago   Up 7 m  8080      busy
test-vm@vm-test:~/dockertest$ docker exec -it 022c55a80088 /bin/sh
/ #
```

Voila, we are in the container and can change everything on the fly.

The configuration file itself is located in the default directory:
`/etc/nginx/nginx.conf`

You can go there, modify configurations and easily validate them:
```
/ # nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

Validation of file is good, but to apply it, we need to restart our nginx service:
```
/ # nginx -s reload
2021/11/10 12:01:50 [notice] 46#46: signal process started
```

And that’s it, now testing of configuration change for your NGINX service in Docker container is easier and no need for rebuilding on every change.

---

Thanks for reading!
If you have an interesting experience with live changes in Docker containers or you are interested in another topic, please add comments and upvote 👍. I’m interested in the dialog.