Skip to content

Commit

Permalink
Swarm config: use absolute paths for mount destination strings
Browse files Browse the repository at this point in the history
Needed for runc >= 1.0.0-rc94.

See runc issue 2928.

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit 9303376)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
  • Loading branch information
AkihiroSuda authored and thaJeztah committed May 18, 2021
1 parent e4b9915 commit afbb127
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 2 deletions.
11 changes: 11 additions & 0 deletions container/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,17 @@ func getSecretTargetPath(r *swarmtypes.SecretReference) string {
return filepath.Join(containerSecretMountPath, r.File.Name)
}

// getConfigTargetPath makes sure that config paths inside the container are
// absolute, as required by the runtime spec, and enforced by runc >= 1.0.0-rc94.
// see https://github.com/opencontainers/runc/issues/2928
func getConfigTargetPath(r *swarmtypes.ConfigReference) string {
if filepath.IsAbs(r.File.Name) {
return r.File.Name
}

return filepath.Join(containerConfigMountPath, r.File.Name)
}

// CreateDaemonEnvironment creates a new environment variable slice for this container.
func (container *Container) CreateDaemonEnvironment(tty bool, linkedEnv []string) []string {
// Setup environment
Expand Down
3 changes: 2 additions & 1 deletion container/container_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const (
// for the graceful container stop before forcefully terminating it.
DefaultStopTimeout = 10

containerConfigMountPath = "/"
containerSecretMountPath = "/run/secrets"
)

Expand Down Expand Up @@ -242,7 +243,7 @@ func (container *Container) SecretMounts() ([]Mount, error) {
}
mounts = append(mounts, Mount{
Source: fPath,
Destination: r.File.Name,
Destination: getConfigTargetPath(r),
Writable: false,
})
}
Expand Down
3 changes: 2 additions & 1 deletion container/container_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
)

const (
containerConfigMountPath = `C:\`
containerSecretMountPath = `C:\ProgramData\Docker\secrets`
containerInternalSecretMountPath = `C:\ProgramData\Docker\internal\secrets`
containerInternalConfigsDirPath = `C:\ProgramData\Docker\internal\configs`
Expand Down Expand Up @@ -87,7 +88,7 @@ func (container *Container) CreateConfigSymlinks() error {
if configRef.File == nil {
continue
}
resolvedPath, _, err := container.ResolvePath(configRef.File.Name)
resolvedPath, _, err := container.ResolvePath(getConfigTargetPath(configRef))
if err != nil {
return err
}
Expand Down

0 comments on commit afbb127

Please sign in to comment.