运行 一个 docker 容器在另一个 docker 容器内?
Running a docker container inside another docker container?
我正在尝试在另一个包含的 docker 环境中创建一个包含的 docker 环境,并通过 NodeJS 的 exec
函数调用它。
我已经通读了 Docker 文档,据我所知,这是通过在启动容器时传递 --privileged
标志来实现的。
当我在 mac 上开发时,我安装了 boot2docker 以使 docker 正常工作,所以我不确定如何设置 [=16] =] 标志。
这是我到目前为止编写的代码:
var st = 'docker run virtual_machine ls'
//log the statement in console (test)
console.log(st);
//execute the Docker command
child = exec(st,
function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
但这是我得到的输出(错误):
stdout:
stderr: time="2015-02-15T18:27:15Z" level="fatal" msg="Post http:///var/run/docker.sock/v1.17/containers/create: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?"
exec error: Error: Command failed: time="2015-02-15T18:27:15Z" level="fatal" msg="Post http:///var/run/docker.sock/v1.17/containers/create: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?"
我怎样才能使这个 exec 调用起作用?是不是立个flag那么简单?如果是这样,我如何在 boot2docker?
中执行此操作
谢谢
--privileged
标志通常会在您 运行 您的 docker 容器时使用 运行 上面的 NodeJS 代码,而不是在启动您的新容器时使用ls
。但是,在这种情况下您不必使用 --privileged
,因为您的新容器不需要它。当 运行 连接您的 NodeJS 容器时,您可能只是缺少 docker 套接字绑定挂载:
docker run --name nodeJS -v /var/run/docker.sock:/var/run/docker.sock ...
例如,
docker run --rm \
-v /var/run/docker.sock:/run/docker.sock \
-v $(which docker):/bin/docker \
--privileged \
node:0.12 node my_script.js
我正在尝试在另一个包含的 docker 环境中创建一个包含的 docker 环境,并通过 NodeJS 的 exec
函数调用它。
我已经通读了 Docker 文档,据我所知,这是通过在启动容器时传递 --privileged
标志来实现的。
当我在 mac 上开发时,我安装了 boot2docker 以使 docker 正常工作,所以我不确定如何设置 [=16] =] 标志。
这是我到目前为止编写的代码:
var st = 'docker run virtual_machine ls'
//log the statement in console (test)
console.log(st);
//execute the Docker command
child = exec(st,
function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
但这是我得到的输出(错误):
stdout:
stderr: time="2015-02-15T18:27:15Z" level="fatal" msg="Post http:///var/run/docker.sock/v1.17/containers/create: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?"
exec error: Error: Command failed: time="2015-02-15T18:27:15Z" level="fatal" msg="Post http:///var/run/docker.sock/v1.17/containers/create: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?"
我怎样才能使这个 exec 调用起作用?是不是立个flag那么简单?如果是这样,我如何在 boot2docker?
中执行此操作谢谢
--privileged
标志通常会在您 运行 您的 docker 容器时使用 运行 上面的 NodeJS 代码,而不是在启动您的新容器时使用ls
。但是,在这种情况下您不必使用 --privileged
,因为您的新容器不需要它。当 运行 连接您的 NodeJS 容器时,您可能只是缺少 docker 套接字绑定挂载:
docker run --name nodeJS -v /var/run/docker.sock:/var/run/docker.sock ...
例如,
docker run --rm \
-v /var/run/docker.sock:/run/docker.sock \
-v $(which docker):/bin/docker \
--privileged \
node:0.12 node my_script.js