Signed-off-by: Sam Whited <sam@samwhited.com>
| ... | ... |
@@ -39,8 +39,10 @@ type nopLog struct{}
|
| 39 | 39 |
|
| 40 | 40 |
func (nopLog) Logf(string, ...interface{}) {}
|
| 41 | 41 |
|
| 42 |
-const defaultDockerdBinary = "dockerd" |
|
| 43 |
-const containerdSocket = "/var/run/docker/containerd/containerd.sock" |
|
| 42 |
+const ( |
|
| 43 |
+ defaultDockerdBinary = "dockerd" |
|
| 44 |
+ defaultContainerdSocket = "/var/run/docker/containerd/containerd.sock" |
|
| 45 |
+) |
|
| 44 | 46 |
|
| 45 | 47 |
var errDaemonNotStarted = errors.New("daemon not started")
|
| 46 | 48 |
|
| ... | ... |
@@ -75,6 +77,7 @@ type Daemon struct {
|
| 75 | 75 |
log LogT |
| 76 | 76 |
pidFile string |
| 77 | 77 |
args []string |
| 78 |
+ containerdSocket string |
|
| 78 | 79 |
|
| 79 | 80 |
// swarm related field |
| 80 | 81 |
swarmListenAddr string |
| ... | ... |
@@ -120,11 +123,12 @@ func NewDaemon(workingDir string, ops ...Option) (*Daemon, error) {
|
| 120 | 120 |
storageDriver: storageDriver, |
| 121 | 121 |
userlandProxy: userlandProxy, |
| 122 | 122 |
// dxr stands for docker-execroot (shortened for avoiding unix(7) path length limitation) |
| 123 |
- execRoot: filepath.Join(os.TempDir(), "dxr", id), |
|
| 124 |
- dockerdBinary: defaultDockerdBinary, |
|
| 125 |
- swarmListenAddr: defaultSwarmListenAddr, |
|
| 126 |
- SwarmPort: DefaultSwarmPort, |
|
| 127 |
- log: nopLog{},
|
|
| 123 |
+ execRoot: filepath.Join(os.TempDir(), "dxr", id), |
|
| 124 |
+ dockerdBinary: defaultDockerdBinary, |
|
| 125 |
+ swarmListenAddr: defaultSwarmListenAddr, |
|
| 126 |
+ SwarmPort: DefaultSwarmPort, |
|
| 127 |
+ log: nopLog{},
|
|
| 128 |
+ containerdSocket: defaultContainerdSocket, |
|
| 128 | 129 |
} |
| 129 | 130 |
|
| 130 | 131 |
for _, op := range ops {
|
| ... | ... |
@@ -252,17 +256,20 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
|
| 252 | 252 |
d.pidFile = filepath.Join(d.Folder, "docker.pid") |
| 253 | 253 |
} |
| 254 | 254 |
|
| 255 |
- d.args = append(d.GlobalFlags, |
|
| 256 |
- "--containerd", containerdSocket, |
|
| 257 |
- "--data-root", d.Root, |
|
| 255 |
+ d.args = append(d.GlobalFlags, "--data-root", d.Root) |
|
| 256 |
+ if d.containerdSocket != "" {
|
|
| 257 |
+ d.args = append(d.args, "--containerd", d.containerdSocket) |
|
| 258 |
+ } |
|
| 259 |
+ d.args = append(d.args, |
|
| 258 | 260 |
"--exec-root", d.execRoot, |
| 259 | 261 |
"--pidfile", d.pidFile, |
| 260 | 262 |
fmt.Sprintf("--userland-proxy=%t", d.userlandProxy),
|
| 261 | 263 |
"--containerd-namespace", d.id, |
| 262 | 264 |
"--containerd-plugins-namespace", d.id+"p", |
| 263 | 265 |
) |
| 266 |
+ |
|
| 264 | 267 |
if d.defaultCgroupNamespaceMode != "" {
|
| 265 |
- d.args = append(d.args, []string{"--default-cgroupns-mode", d.defaultCgroupNamespaceMode}...)
|
|
| 268 |
+ d.args = append(d.args, "--default-cgroupns-mode", d.defaultCgroupNamespaceMode) |
|
| 266 | 269 |
} |
| 267 | 270 |
if d.experimental {
|
| 268 | 271 |
d.args = append(d.args, "--experimental") |
| ... | ... |
@@ -271,10 +278,10 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
|
| 271 | 271 |
d.args = append(d.args, "--init") |
| 272 | 272 |
} |
| 273 | 273 |
if !(d.UseDefaultHost || d.UseDefaultTLSHost) {
|
| 274 |
- d.args = append(d.args, []string{"--host", d.Sock()}...)
|
|
| 274 |
+ d.args = append(d.args, "--host", d.Sock()) |
|
| 275 | 275 |
} |
| 276 | 276 |
if root := os.Getenv("DOCKER_REMAP_ROOT"); root != "" {
|
| 277 |
- d.args = append(d.args, []string{"--userns-remap", root}...)
|
|
| 277 |
+ d.args = append(d.args, "--userns-remap", root) |
|
| 278 | 278 |
} |
| 279 | 279 |
|
| 280 | 280 |
// If we don't explicitly set the log-level or debug flag(-D) then |
| ... | ... |
@@ -7,6 +7,16 @@ import ( |
| 7 | 7 |
// Option is used to configure a daemon. |
| 8 | 8 |
type Option func(*Daemon) |
| 9 | 9 |
|
| 10 |
+// WithContainerdSocket sets the --containerd option on the daemon. |
|
| 11 |
+// Use an empty string to remove the option. |
|
| 12 |
+// |
|
| 13 |
+// If unset the --containerd option will be used with a default value. |
|
| 14 |
+func WithContainerdSocket(socket string) Option {
|
|
| 15 |
+ return func(d *Daemon) {
|
|
| 16 |
+ d.containerdSocket = socket |
|
| 17 |
+ } |
|
| 18 |
+} |
|
| 19 |
+ |
|
| 10 | 20 |
// WithDefaultCgroupNamespaceMode sets the default cgroup namespace mode for the daemon |
| 11 | 21 |
func WithDefaultCgroupNamespaceMode(mode string) Option {
|
| 12 | 22 |
return func(d *Daemon) {
|