How to show the run command of a docker container

前端 未结 11 1217
萌比男神i
萌比男神i 2020-11-27 10:24

I use a third party GUI (Synology Docker package) to setup a docker container. However, it\'s limitation makes me need to run the container from the command line. (I want to

相关标签:
11条回答
  • 2020-11-27 10:45

    So how to reverse engineering docker run command?

    There is a github repository which try to reverse engineering docker run command, but it is not perfect currently, version is 0.1.2. You should follow it for updating. Maybe one day you can use it to get correct run command with it.

    $ sudo pip install runlike
    
    # run the ubuntu image
    $ docker run -ti ubuntu bash
    
    $ docker ps -a  
    # suppose you get the container ID 1dfff2ba0226
    
    # Run runlike to get the docker run command. 
    $ runlike 1dfff2ba0226
    docker run --name=elated_cray -t ubuntu bash
    

    Github repository: runlike

    Updates:

    Run without installing (Thanks @tilo)

    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
        assaflavie/runlike YOUR-CONTAINER
    

    or set alias

    alias runlike="docker run --rm -v/var/run/docker.sock:/var/run/docker.sock 
     assaflavie/runlike"
    
    runlike YOUR-CONTAINER
    
    0 讨论(0)
  • 2020-11-27 10:47

    I wrote a simple Node-based CLI tool to generate a docker run command from an existing container.

    https://www.npmjs.com/package/rekcod

    Here's an example:

    $ npm i -g rekcod
    $ rekcod redis_container
    
    docker run -d --name redis_container --restart always -h a44159e148e1 \
    --expose 6379/tcp -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
    -e REDIS_VERSION=3.0.7 -e REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.0.7.tar.gz \
    -e REDIS_DOWNLOAD_SHA1=e56b4b7e033ae8dbf311f9191cf6fdf3ae974d1c \
    --entrypoint "/entrypoint.sh" redis "redis-server"
    

    Also handles links and mounted volumes and other stuff.

    Not super robust at the moment, but handles more than some of the other things mentioned, and it was more of what I was looking for.

    EDIT: In a single command, without installing any software:

    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod redis_container
    
    0 讨论(0)
  • If you do not want to install anything into your current running Docker server setup, you can simply execute (replace $CONTAINER_NAME with the container name you want to have the run arguments):

    docker run -it --rm --volume /var/run/docker.sock:/var/run/docker.sock --privileged docker sh -c "apk add --no-cache nodejs nodejs-npm && npm i -g rekcod && rekcod $CONTAINER_NAME"
    

    (for the rekcod method)

    or

    docker run -it --rm --volume /var/run/docker.sock:/var/run/docker.sock --privileged docker sh -c "apk add --no-cache py-pip && pip install runlike && runlike $CONTAINER_NAME"
    

    (for the runlike method)

    0 讨论(0)
  • 2020-11-27 10:48

    That docker run command isn't specified in the Dockerfile or any other docker-related documents.

    Either you find an example in the documentation associated to your container, or you can infer that docker run with (at least for the command and port mapping) a docker ps -a (but that won't give you the possible --volumes-from options)

    Check also /usr/syno/etc/packages/Docker-GitLab/config

    This differ from the gitlab config itself, which on Synology is available in /usr/syno/etc/packages/Docker/synology_gitlab.config

    0 讨论(0)
  • 2020-11-27 10:51

    Use docker inspect:

    $ docker inspect foo/bar
    [
        {
            # …
            "Config": {
                # …
                "Cmd": [
                    "/usr/local/bin/script.sh"
                ],
                # …
            }
        }
    ]
    

    You can programatically parse this with jq:

    $ docker inspect foo/bar | jq -r '.[0]["Config"]["Cmd"][0]'
    /usr/local/bin/script.sh
    
    0 讨论(0)
提交回复
热议问题