Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use docker remote api to create container?

Tags:

docker

I'm new to docker. I have read the tutorial in docker remote API . In aspect of creating container. It show me too many param to fill. I want to know what is equivalent to this command :

docker run -d -p 5000:5000 --restart=always --name registry registry:2.

I have no idea about it. Can anyone tell me? Thanks!

like image 885
v11 Avatar asked Jul 13 '15 11:07

v11


People also ask

How do I use remote Docker?

To use the remote host as your Docker host instead of your local machine, set the DOCKER_HOST environment variable to point to the remote host. This variable will instruct the Docker CLI client to connect to the remote server. Now any Docker command you run will be run on the Droplet.

What is Docker REST API?

The Docker Engine API is a RESTful API accessed by an HTTP client such as wget or curl , or the HTTP library which is part of most modern programming languages.


2 Answers

More or less just copying VonCs answer in order to update to todays version of docker (1.13) and docker remote api version (v1.26).

What is different:

  • All the configuration needs to be done when the container is created, otherwise the following error message is returned when starting the container the way VonC did. {"message":"starting container with non-empty request body was deprecated since v1.10 and removed in v1.12"}

First create the container: (including all the configuration) curl -v -X POST -H "Content-Type: application/json" -d @docker.conf http://localhost:2376/containers/create?name=registry The file docker.conf looks like this:

{
  "Image": registry:2.",
  "ExposedPorts": {
    "5000/tcp": {}
  },
  "HostConfig": {
    "PortBindings": {
      "5000/tcp": [
        {
          "HostPort": "5000"
        }
      ]
    },
    "RestartPolicy": {
      "Name": "always"
    }
    "AutoRemove": true
  }
}

Then start it: (the parameter name is not necessary, the container is just named registry) curl -v -X POST -H "Content-Type: application/json" http://localhost:2376/containers/registry/start

like image 185
rocksteady Avatar answered Nov 16 '22 02:11

rocksteady


Original answer (July 2015):

That would be (not tested directly), as in this tutorial (provided the remote API is enabled):

First create the container:

curl -v -X POST -H "Content-Type: application/json" -d '{"Image": " registry:2.",}' http://localhost:2376/containers/create?name=registry

Then start it:

curl -v -X POST -H "Content-Type: application/json" -d '{"PortBindings": { "5000/tcp": [{ "HostPort": "5000" }] },"RestartPolicy": { "Name": "always",},}' http://localhost:2376/containers/registry/start?name=registry

Update February 2017, for docker 1.13+ see rocksteady's answer, using a similar idea but with the current engine/api/v1.26.

like image 28
VonC Avatar answered Nov 16 '22 03:11

VonC