mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #19688 from crosbymichael/tmpfs-tar
Remove tar copy-up for tmpfs mounts
This commit is contained in:
commit
3a70ab3a2c
4 changed files with 2 additions and 67 deletions
|
@ -437,7 +437,6 @@ func (d *Driver) setupMounts(container *configs.Config, c *execdriver.Command) e
|
||||||
flags = syscall.MS_NOEXEC | syscall.MS_NOSUID | syscall.MS_NODEV
|
flags = syscall.MS_NOEXEC | syscall.MS_NOSUID | syscall.MS_NODEV
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
fulldest := filepath.Join(c.Rootfs, m.Destination)
|
|
||||||
if m.Data != "" {
|
if m.Data != "" {
|
||||||
flags, data, err = mount.ParseTmpfsOptions(m.Data)
|
flags, data, err = mount.ParseTmpfsOptions(m.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -450,8 +449,6 @@ func (d *Driver) setupMounts(container *configs.Config, c *execdriver.Command) e
|
||||||
Data: data,
|
Data: data,
|
||||||
Device: "tmpfs",
|
Device: "tmpfs",
|
||||||
Flags: flags,
|
Flags: flags,
|
||||||
PremountCmds: genTmpfsPremountCmd(c.TmpDir, fulldest, m.Destination),
|
|
||||||
PostmountCmds: genTmpfsPostmountCmd(c.TmpDir, fulldest, m.Destination),
|
|
||||||
PropagationFlags: []int{mountPropagationMap[volume.DefaultPropagationMode]},
|
PropagationFlags: []int{mountPropagationMap[volume.DefaultPropagationMode]},
|
||||||
})
|
})
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
package native
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"os/exec"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
|
||||||
"github.com/opencontainers/runc/libcontainer/configs"
|
|
||||||
)
|
|
||||||
|
|
||||||
func genTmpfsPremountCmd(tmpDir string, fullDest string, dest string) []configs.Command {
|
|
||||||
var premount []configs.Command
|
|
||||||
tarPath, err := exec.LookPath("tar")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Warn("tar command is not available for tmpfs mount: %s", err)
|
|
||||||
return premount
|
|
||||||
}
|
|
||||||
if _, err = exec.LookPath("rm"); err != nil {
|
|
||||||
logrus.Warn("rm command is not available for tmpfs mount: %s", err)
|
|
||||||
return premount
|
|
||||||
}
|
|
||||||
tarFile := fmt.Sprintf("%s/%s.tar", tmpDir, strings.Replace(dest, "/", "_", -1))
|
|
||||||
if _, err := os.Stat(fullDest); err == nil {
|
|
||||||
premount = append(premount, configs.Command{
|
|
||||||
Path: tarPath,
|
|
||||||
Args: []string{"-cf", tarFile, "-C", fullDest, "."},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return premount
|
|
||||||
}
|
|
||||||
|
|
||||||
func genTmpfsPostmountCmd(tmpDir string, fullDest string, dest string) []configs.Command {
|
|
||||||
var postmount []configs.Command
|
|
||||||
tarPath, err := exec.LookPath("tar")
|
|
||||||
if err != nil {
|
|
||||||
return postmount
|
|
||||||
}
|
|
||||||
rmPath, err := exec.LookPath("rm")
|
|
||||||
if err != nil {
|
|
||||||
return postmount
|
|
||||||
}
|
|
||||||
if _, err := os.Stat(fullDest); os.IsNotExist(err) {
|
|
||||||
return postmount
|
|
||||||
}
|
|
||||||
tarFile := fmt.Sprintf("%s/%s.tar", tmpDir, strings.Replace(dest, "/", "_", -1))
|
|
||||||
postmount = append(postmount, configs.Command{
|
|
||||||
Path: tarPath,
|
|
||||||
Args: []string{"-xf", tarFile, "-C", fullDest, "."},
|
|
||||||
})
|
|
||||||
return append(postmount, configs.Command{
|
|
||||||
Path: rmPath,
|
|
||||||
Args: []string{"-f", tarFile},
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -319,10 +319,7 @@ unit, `b` is used. Set LIMIT to `-1` to enable unlimited swap.
|
||||||
|
|
||||||
$ docker run -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image
|
$ docker run -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image
|
||||||
|
|
||||||
This command mounts a `tmpfs` at `/tmp` within the container. The mount copies
|
This command mounts a `tmpfs` at `/tmp` within the container. The supported mount
|
||||||
the underlying content of `my_image` into `/tmp`. For example if there was a
|
|
||||||
directory `/tmp/content` in the base image, docker will copy this directory and
|
|
||||||
all of its content on top of the tmpfs mounted on `/tmp`. The supported mount
|
|
||||||
options are the same as the Linux default `mount` flags. If you do not specify
|
options are the same as the Linux default `mount` flags. If you do not specify
|
||||||
any options, the systems uses the following options:
|
any options, the systems uses the following options:
|
||||||
`rw,noexec,nosuid,nodev,size=65536k`.
|
`rw,noexec,nosuid,nodev,size=65536k`.
|
||||||
|
|
|
@ -490,10 +490,7 @@ standard input.
|
||||||
|
|
||||||
$ docker run -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image
|
$ docker run -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image
|
||||||
|
|
||||||
This command mounts a `tmpfs` at `/tmp` within the container. The mount copies
|
This command mounts a `tmpfs` at `/tmp` within the container. The supported mount
|
||||||
the underlying content of `my_image` into `/tmp`. For example if there was a
|
|
||||||
directory `/tmp/content` in the base image, docker will copy this directory and
|
|
||||||
all of its content on top of the tmpfs mounted on `/tmp`. The supported mount
|
|
||||||
options are the same as the Linux default `mount` flags. If you do not specify
|
options are the same as the Linux default `mount` flags. If you do not specify
|
||||||
any options, the systems uses the following options:
|
any options, the systems uses the following options:
|
||||||
`rw,noexec,nosuid,nodev,size=65536k`.
|
`rw,noexec,nosuid,nodev,size=65536k`.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue