mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 19:13:34 +00:00
add -v|--volume to bind mount host path into a service container
This commit is contained in:
@@ -15,6 +15,7 @@ type runOptions struct {
|
|||||||
mode string
|
mode string
|
||||||
name string
|
name string
|
||||||
publish []string
|
publish []string
|
||||||
|
volumes []string
|
||||||
|
|
||||||
cluster string
|
cluster string
|
||||||
}
|
}
|
||||||
@@ -55,8 +56,11 @@ func NewRunCommand() *cobra.Command {
|
|||||||
"Supported protocols: tcp, udp, http, https (default is tcp). If a hostname for http(s) port is not specified, a random hostname is generated.\n"+
|
"Supported protocols: tcp, udp, http, https (default is tcp). If a hostname for http(s) port is not specified, a random hostname is generated.\n"+
|
||||||
"Examples:\n"+
|
"Examples:\n"+
|
||||||
" -p app.example.com:8080/https Publish port 8080 as HTTPS via load balancer with custom hostname\n"+
|
" -p app.example.com:8080/https Publish port 8080 as HTTPS via load balancer with custom hostname\n"+
|
||||||
" -p 9000:8080 Publish port 8080 as TCP port 9000 via load balancer\n"+
|
" -p 9000:8080 Publish port 8080 as TCP port 9000 via load balancer\n"+
|
||||||
" -p 53:5353/udp@host Bind UDP port 5353 to host port 53")
|
" -p 53:5353/udp@host Bind UDP port 5353 to host port 53")
|
||||||
|
cmd.Flags().StringSliceVarP(&opts.volumes, "volume", "v", nil,
|
||||||
|
"Bind mount a host file or directory into a service container using the format "+
|
||||||
|
"/host/path:/container/path[:ro]. Can be specified multiple times.")
|
||||||
|
|
||||||
cmd.Flags().StringVarP(
|
cmd.Flags().StringVarP(
|
||||||
&opts.cluster, "cluster", "c", "",
|
&opts.cluster, "cluster", "c", "",
|
||||||
@@ -81,11 +85,13 @@ func run(ctx context.Context, uncli *cli.CLI, opts runOptions) error {
|
|||||||
}
|
}
|
||||||
ports[i] = port
|
ports[i] = port
|
||||||
}
|
}
|
||||||
|
// TODO: parse and validate opts.volumes to fail fast if invalid.
|
||||||
|
|
||||||
spec := api.ServiceSpec{
|
spec := api.ServiceSpec{
|
||||||
Container: api.ContainerSpec{
|
Container: api.ContainerSpec{
|
||||||
Command: opts.command,
|
Command: opts.command,
|
||||||
Image: opts.image,
|
Image: opts.image,
|
||||||
|
Volumes: opts.volumes,
|
||||||
},
|
},
|
||||||
Mode: opts.mode,
|
Mode: opts.mode,
|
||||||
Name: opts.name,
|
Name: opts.name,
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ type ContainerSpec struct {
|
|||||||
Image string
|
Image string
|
||||||
// Run a custom init inside the container. If nil, use the daemon's configured settings.
|
// Run a custom init inside the container. If nil, use the daemon's configured settings.
|
||||||
Init *bool
|
Init *bool
|
||||||
|
// List of volumes to bind mount into the container.
|
||||||
|
Volumes []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ContainerSpec) Validate() error {
|
func (s *ContainerSpec) Validate() error {
|
||||||
|
|||||||
@@ -268,6 +268,7 @@ func (cli *Client) runContainer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
hostConfig := &container.HostConfig{
|
hostConfig := &container.HostConfig{
|
||||||
|
Binds: spec.Container.Volumes,
|
||||||
Init: spec.Container.Init,
|
Init: spec.Container.Init,
|
||||||
PortBindings: portBindings,
|
PortBindings: portBindings,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user