Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker compose未在/var/profile.d中看到主机环境变量集_Docker_Docker Compose - Fatal编程技术网

docker compose未在/var/profile.d中看到主机环境变量集

docker compose未在/var/profile.d中看到主机环境变量集,docker,docker-compose,Docker,Docker Compose,下面是我的docker compose.yaml的一个片段,我试图将环境变量(即$GOPATH)传递给我的Dockerfile: kontrol: container_name: 'kontrol' build: context: '.' dockerfile: 'Dockerfile' args: gopath: '${GOPATH}' volumes: - '/certs:${HOME}/.kite/certs' ports:

下面是我的
docker compose.yaml
的一个片段,我试图将环境变量(即
$GOPATH
)传递给我的
Dockerfile

kontrol:
  container_name: 'kontrol'
  build:
    context: '.'
    dockerfile: 'Dockerfile'
    args:
      gopath: '${GOPATH}'
  volumes:
    - '/certs:${HOME}/.kite/certs'
  ports:
    - '6000:6000'
  depends_on:
    - 'etcd'
FROM scratch
ARG gopath
ADD ${gopath}/bin/kontrol /
ENV KONTROL_PORT=6000 \
    KONTROL_USERNAME="gonzo" \
    KONTROL_STORAGE="etcd" \
    KONTROL_MACHINES="http://etcd:2379" \
    KONTROL_KONTROLURL="http://kontrol:6000/kite" \
    KONTROL_PUBLICKEYFILE="/certs/key_pub.pem" \
    KONTROL_PRIVATEKEYFILE="/certs/key.pem" \
    KITE_ENVIRONMENT="dev" \
    KITE_REGION="ch"
CMD [ "/kontrol -initial", "/kontrol" ]
下面是实际的
Dockerfile

kontrol:
  container_name: 'kontrol'
  build:
    context: '.'
    dockerfile: 'Dockerfile'
    args:
      gopath: '${GOPATH}'
  volumes:
    - '/certs:${HOME}/.kite/certs'
  ports:
    - '6000:6000'
  depends_on:
    - 'etcd'
FROM scratch
ARG gopath
ADD ${gopath}/bin/kontrol /
ENV KONTROL_PORT=6000 \
    KONTROL_USERNAME="gonzo" \
    KONTROL_STORAGE="etcd" \
    KONTROL_MACHINES="http://etcd:2379" \
    KONTROL_KONTROLURL="http://kontrol:6000/kite" \
    KONTROL_PUBLICKEYFILE="/certs/key_pub.pem" \
    KONTROL_PRIVATEKEYFILE="/certs/key.pem" \
    KITE_ENVIRONMENT="dev" \
    KITE_REGION="ch"
CMD [ "/kontrol -initial", "/kontrol" ]
问题是,即使在我当前的shell中定义了
GOPATH

[j3d@pc-5]$ echo $GOPATH
/home/j3d/Projects/go
。。。docker compose没有看到它:

[j3d@pc-5 test]$ sudo docker-compose -f docker-compose.yaml up -d
WARNING: The GOPATH variable is not set. Defaulting to a blank string.
...
奇怪的是,环境变量
HOME
是可见的,并且可以工作。这些环境变量之间的唯一区别是在
/etc/profile.d/go.sh
中设置了
GOPATH

export GOROOT="/usr/local/go"
export PATH="$PATH:$GOROOT/bin"

我遗漏了什么吗?

您使用
sudo
执行docker compose。您的变量没有设置,很可能是因为在使用sudo时没有保留环境变量

使用sudo的
-E
开关来保留env变量。也可以使用docker而不使用sudo。啊,好的,我明白了。非常感谢:-)@b0gusb,前提是你明白后果。