Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Apply changes to docker container after 'exec' into it

I have successfully shelled into a RUNNING docker container using

docker exec -i -t 7be21f1544a5 bash

I have made some changes to some json files and wanted to apply these changes to reflect online.

I am a beginner and have tried to restart, mount in vain. What strings I have to replace when I mount using docker run?

Is there any online sample?

CONTAINER ID: 7be21f1544a5
IMAGE: gater/web
COMMAND: "/bin/sh -c 'nginx'"
CREATED: 4 weeks ago
STATUS: Up 44 minutes
PORTS: 443/tcp, 172.16.0.1:10010->80/tcp
NAMES: web
like image 658
mediaroot Avatar asked Jun 03 '26 17:06

mediaroot


2 Answers

You can run either create a Dockefile and run:

docker build . 

from the same directory where your Dockerfile is located.

or you can run:

docker run -i -t <docker-image> bash

or (if your container is already running)

docker exec -i -t <container-id> bash

once you are in the shell make all the changes you please. Then run:

docker commit <container-id> myimage:0.1

You will have a new docker image locally myimage:0.1. If you want to push to a docker repository (dockerhub or your private docker repo) you can run:

docker push myimage:0.1
like image 124
Rico Avatar answered Jun 06 '26 05:06

Rico


There are 2 ways to do it :

  • Dockerfile approach

You need to know what changes you have made into Docker container after you have exec into it and also the Dockerfile of the image .

Lets say you installed additional rpm using yum install command after entering into the container (yum install perl-HTML-Format) and updated some file say /opt/test.json inside contianer (take a backup of this file in Docker host in some directory or in directory Dockerfile exist)

The above command/steps you can place in Dockerfile as

RUN  yum install perl-HTML-Format
COPY /docker-host-dir/updated-test.json  /opt/test.json

Once you update the Dockerfile, create the new image and push it to Docker repository

docker build -t test_image .
docker push test_image:latest

You can save the updated Dockerfile for future use.

  • Docker commit command approach

After you made the changes to container, use below commands to create a new image from container's changes and push it online

docker commit container-id test_image
docker push test_image

docker commit --help  
Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
like image 40
spectre007 Avatar answered Jun 06 '26 05:06

spectre007