【发布时间】:2019-01-31 09:14:56
【问题描述】:
我有一个 Golang 应用程序,它依赖于 FTP 服务器。
因此,在 docker compose 中,我构建了一个 FTP 服务并将其引用到我的测试中。
所以,在我的 docker-compose.yml 我有:
version: '3'
services:
mygoapp:
build:
dockerfile: ./Dockerfile.local
context: ./
volumes:
- ./volume:/go
- ./test_files:/var/test_files
networks:
mygoapp_network:
env_file:
- test.env
tty: true
ftpd-server:
container_name: ftpd-server
image: stilliard/pure-ftpd:hardened
environment:
PUBLICHOST: "0.0.0.0"
FTP_USER_NAME: "julien"
FTP_USER_PASS: "test"
FTP_USER_HOME: "/home/www/julien"
restart: on-failure
networks:
mygoapp_network:
networks:
mygoapp_network:
external: true
在我的 gitlab-ci.yml 我有
variables:
PACKAGE_PATH: /go/src/gitlab.com/xxx
VOLUME_PATH: /var/test_files
stages:
- test
# A hack to make Golang-in-Gitlab happy
.anchors:
- &inject-gopath
mkdir -p $(dirname ${PACKAGE_PATH})
&& ln -s ${CI_PROJECT_DIR} ${PACKAGE_PATH}
&& cd ${PACKAGE_PATH}
test:
image: docker:18
services:
- docker:dind
stage: test
# only:
# - production
before_script:
- touch test.env
- apk update
- apk upgrade
- apk add --no-cache py-pip
- pip install docker-compose
- docker network create mygoapp_network
- mkdir -p volume/log
script:
- docker-compose -f docker-local.yaml up --build -d
- docker exec project-0_mygoapp_1 ls /var/test_files
- docker exec project-0_mygoapp_1 echo $VOLUME_PATH
- docker exec project-0_mygoapp_1 go test ./... -v
我的所有服务都已启动
但是当我跑步时
- docker exec project-0_myapp_1 echo $VOLUME_PATH
我可以看到 $VOLUME_PATH 等于 /var/test_files
但在代码中,当我这样做时:
os.Getenv("VOLUME_PATH")
变量为空
另外,在本地,使用 docker exec,变量是可以的。
我也尝试将变量放入test 定义中,但它仍然不起作用
编辑:我能做到的唯一方法是在 docker compose 中设置环境变量,但这不是很好
知道怎么解决吗?
【问题讨论】:
-
您找到解决方案了吗?我也不明白你的方法,我没有看到你安装 golang 的位置。它是否已经存在于 Docker 映像中?我正在努力让它工作,但还不能
标签: docker environment-variables gitlab-ci