docker - docker-compose没有在/var/profile.d中看到设置的主机环境变量

标签 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:
    - '6000:6000'
  depends_on:
    - 'etcd'

这是实际的Dockerfile:
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是可见的并且确实起作用。这些环境变量之间的唯一区别是GOPATH是在/etc/profile.d/go.sh中设置的:
export GOROOT="/usr/local/go"
export PATH="$PATH:$GOROOT/bin"

我想念什么吗?

最佳答案

您使用sudo执行docker-compose。未设置您的变量,很可能是因为使用sudo How to keep environment variables using sudo 时不会保留环境变量。

关于docker - docker-compose没有在/var/profile.d中看到设置的主机环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729569/

相关文章:

docker - 如何在 docker 容器中运行 Symfony 控制台命令

docker - ApostropheCMS Docker镜像问题

mysql - 第 1 行 : Operation CREATE USER failed for 'root' @'%' 处出现错误 1396 (HY000)

docker - Docker撰写构建副本失败

rest - 通过 REST 处理 Azure 容器注册表中的图像

docker - 为什么 "service cron start"在 Docker 文件中不起作用?

docker - 无法重启 Docker 机器

amazon-web-services - 弹性Kubernetes服务AWS部署过程可避免停机

postgresql - 在 Docker Compose 中更改 postgres 容器服务器端口

docker - 为redis主机配置docker容器ip