Step 4: Can create containers
This commit is contained in:
parent
fe9b062c36
commit
ec71ff464f
7
curl.go
7
curl.go
@ -1,13 +1,14 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
func curl(socket, method, path string) (io.ReadCloser, error) {
|
func curl(socket, method, path string, body []byte) (io.ReadCloser, error) {
|
||||||
socketDial := func(proto, addr string) (conn net.Conn, err error) {
|
socketDial := func(proto, addr string) (conn net.Conn, err error) {
|
||||||
return net.Dial("unix", socket)
|
return net.Dial("unix", socket)
|
||||||
}
|
}
|
||||||
@ -19,11 +20,13 @@ func curl(socket, method, path string) (io.ReadCloser, error) {
|
|||||||
Transport: tr,
|
Transport: tr,
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err := http.NewRequest(method, path, nil)
|
req, err := http.NewRequest(method, path, bytes.NewReader(body))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Error creating request: %w\n", err)
|
return nil, fmt.Errorf("Error creating request: %w\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
req.Header.Add("Content-Type", "application/json")
|
||||||
|
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Error performing request: %w\n", err)
|
return nil, fmt.Errorf("Error performing request: %w\n", err)
|
||||||
|
@ -21,7 +21,12 @@
|
|||||||
<tbody id="containers">
|
<tbody id="containers">
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<div style="text-align: center">
|
||||||
|
<button type="button" id="create-btn">Create container</button>
|
||||||
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
document.getElementById('create-btn').addEventListener("click", () => fetch('/containers', {method: 'POST'}));
|
||||||
|
|
||||||
fetch('/containers').then(
|
fetch('/containers').then(
|
||||||
(res) => res.json()
|
(res) => res.json()
|
||||||
).then(
|
).then(
|
||||||
|
11
main.go
11
main.go
@ -12,7 +12,16 @@ var staticfiles embed.FS
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
http.HandleFunc("GET /containers", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("GET /containers", func(w http.ResponseWriter, r *http.Request) {
|
||||||
rd, err := curl("/var/run/docker.sock", "GET", "http://d/v1.43/containers/json?all=true")
|
rd, err := curl("/var/run/docker.sock", "GET", "http://d/v1.43/containers/json?all=true", nil)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
} else {
|
||||||
|
io.Copy(w, rd)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
http.HandleFunc("POST /containers", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
rd, err := curl("/var/run/docker.sock", "POST", "http://d/v1.43/containers/create", []byte(`{"Image": "alpine:latest", "Cmd": ["echo", "Hello Go Meetup!"]}`))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user