mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Set environment variables using a file.
This commit is contained in:
parent
5eb472025a
commit
be7eb4bfcb
4 changed files with 49 additions and 20 deletions
50
container.go
50
container.go
|
@ -431,6 +431,20 @@ func (container *Container) SaveHostConfig(hostConfig *HostConfig) (err error) {
|
||||||
return ioutil.WriteFile(container.hostConfigPath(), data, 0666)
|
return ioutil.WriteFile(container.hostConfigPath(), data, 0666)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (container *Container) generateEnvConfig(env []string) error {
|
||||||
|
fo, err := os.Create(container.EnvConfigPath())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer fo.Close()
|
||||||
|
for _, item := range env {
|
||||||
|
if _, err := fo.WriteString(item + "\n"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (container *Container) generateLXCConfig(hostConfig *HostConfig) error {
|
func (container *Container) generateLXCConfig(hostConfig *HostConfig) error {
|
||||||
fo, err := os.Create(container.lxcConfigPath())
|
fo, err := os.Create(container.lxcConfigPath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -841,17 +855,17 @@ func (container *Container) Start(hostConfig *HostConfig) (err error) {
|
||||||
params = append(params, "-u", container.Config.User)
|
params = append(params, "-u", container.Config.User)
|
||||||
}
|
}
|
||||||
|
|
||||||
if container.Config.Tty {
|
// Setup environment
|
||||||
params = append(params, "-e", "TERM=xterm")
|
env := []string{
|
||||||
|
"HOME=/",
|
||||||
|
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||||
|
"container=lxc",
|
||||||
|
"HOSTNAME=" + container.Config.Hostname,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup environment
|
if container.Config.Tty {
|
||||||
params = append(params,
|
env = append(env, "TERM=xterm")
|
||||||
"-e", "HOME=/",
|
}
|
||||||
"-e", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
|
||||||
"-e", "container=lxc",
|
|
||||||
"-e", "HOSTNAME="+container.Config.Hostname,
|
|
||||||
)
|
|
||||||
|
|
||||||
// Init any links between the parent and children
|
// Init any links between the parent and children
|
||||||
runtime := container.runtime
|
runtime := container.runtime
|
||||||
|
@ -887,11 +901,19 @@ func (container *Container) Start(hostConfig *HostConfig) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, envVar := range link.ToEnv() {
|
for _, envVar := range link.ToEnv() {
|
||||||
params = append(params, "-e", envVar)
|
env = append(env, envVar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, elem := range container.Config.Env {
|
||||||
|
env = append(env, elem)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := container.generateEnvConfig(env); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if container.Config.WorkingDir != "" {
|
if container.Config.WorkingDir != "" {
|
||||||
workingDir := path.Clean(container.Config.WorkingDir)
|
workingDir := path.Clean(container.Config.WorkingDir)
|
||||||
utils.Debugf("[working dir] working dir is %s", workingDir)
|
utils.Debugf("[working dir] working dir is %s", workingDir)
|
||||||
|
@ -905,10 +927,6 @@ func (container *Container) Start(hostConfig *HostConfig) (err error) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, elem := range container.Config.Env {
|
|
||||||
params = append(params, "-e", elem)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Program
|
// Program
|
||||||
params = append(params, "--", container.Path)
|
params = append(params, "--", container.Path)
|
||||||
params = append(params, container.Args...)
|
params = append(params, container.Args...)
|
||||||
|
@ -1416,6 +1434,10 @@ func (container *Container) jsonPath() string {
|
||||||
return path.Join(container.root, "config.json")
|
return path.Join(container.root, "config.json")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (container *Container) EnvConfigPath() string {
|
||||||
|
return path.Join(container.root, "config.env")
|
||||||
|
}
|
||||||
|
|
||||||
func (container *Container) lxcConfigPath() string {
|
func (container *Container) lxcConfigPath() string {
|
||||||
return path.Join(container.root, "config.lxc")
|
return path.Join(container.root, "config.lxc")
|
||||||
}
|
}
|
||||||
|
|
1
graph.go
1
graph.go
|
@ -201,6 +201,7 @@ func (graph *Graph) getDockerInitLayer() (string, error) {
|
||||||
"/proc": "dir",
|
"/proc": "dir",
|
||||||
"/sys": "dir",
|
"/sys": "dir",
|
||||||
"/.dockerinit": "file",
|
"/.dockerinit": "file",
|
||||||
|
"/.dockerenv": "file",
|
||||||
"/etc/resolv.conf": "file",
|
"/etc/resolv.conf": "file",
|
||||||
"/etc/hosts": "file",
|
"/etc/hosts": "file",
|
||||||
"/etc/hostname": "file",
|
"/etc/hostname": "file",
|
||||||
|
|
|
@ -97,6 +97,9 @@ lxc.mount.entry = shm {{$ROOTFS}}/dev/shm tmpfs size=65536k,nosuid,nodev,noexec
|
||||||
# Inject dockerinit
|
# Inject dockerinit
|
||||||
lxc.mount.entry = {{.SysInitPath}} {{$ROOTFS}}/.dockerinit none bind,ro 0 0
|
lxc.mount.entry = {{.SysInitPath}} {{$ROOTFS}}/.dockerinit none bind,ro 0 0
|
||||||
|
|
||||||
|
# Inject env
|
||||||
|
lxc.mount.entry = {{.EnvConfigPath}} {{$ROOTFS}}/.dockerenv none bind,ro 0 0
|
||||||
|
|
||||||
# In order to get a working DNS environment, mount bind (ro) the host's /etc/resolv.conf into the container
|
# In order to get a working DNS environment, mount bind (ro) the host's /etc/resolv.conf into the container
|
||||||
lxc.mount.entry = {{.ResolvConfPath}} {{$ROOTFS}}/etc/resolv.conf none bind,ro 0 0
|
lxc.mount.entry = {{.ResolvConfPath}} {{$ROOTFS}}/etc/resolv.conf none bind,ro 0 0
|
||||||
{{if .Volumes}}
|
{{if .Volumes}}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/dotcloud/docker/netlink"
|
"github.com/dotcloud/docker/netlink"
|
||||||
"github.com/dotcloud/docker/utils"
|
"github.com/dotcloud/docker/utils"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
|
@ -69,9 +70,14 @@ func changeUser(u string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear environment pollution introduced by lxc-start
|
// Clear environment pollution introduced by lxc-start
|
||||||
func cleanupEnv(env utils.ListOpts) {
|
func cleanupEnv() {
|
||||||
os.Clearenv()
|
os.Clearenv()
|
||||||
for _, kv := range env {
|
content, err := ioutil.ReadFile("/.dockerenv")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Unable to load environment variables: %v", err)
|
||||||
|
}
|
||||||
|
lines := strings.Split(string(content), "\n")
|
||||||
|
for _, kv := range lines {
|
||||||
parts := strings.SplitN(kv, "=", 2)
|
parts := strings.SplitN(kv, "=", 2)
|
||||||
if len(parts) == 1 {
|
if len(parts) == 1 {
|
||||||
parts = append(parts, "")
|
parts = append(parts, "")
|
||||||
|
@ -104,12 +110,9 @@ func SysInit() {
|
||||||
var gw = flag.String("g", "", "gateway address")
|
var gw = flag.String("g", "", "gateway address")
|
||||||
var workdir = flag.String("w", "", "workdir")
|
var workdir = flag.String("w", "", "workdir")
|
||||||
|
|
||||||
var flEnv utils.ListOpts
|
|
||||||
flag.Var(&flEnv, "e", "Set environment variables")
|
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
cleanupEnv(flEnv)
|
cleanupEnv()
|
||||||
setupNetworking(*gw)
|
setupNetworking(*gw)
|
||||||
setupWorkingDirectory(*workdir)
|
setupWorkingDirectory(*workdir)
|
||||||
changeUser(*u)
|
changeUser(*u)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue