我使用NodeJS构建后端,并希望使用TravisCI和Docker运行测试。
在我的代码中,我有一个秘密的环境:process.env.SOME_API_KEY
这是我的Dockerfile.dev
FROM node:alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]
我的泊坞窗撰写:
version: "3"
services:
api:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- /app/node_modules
- .:/app
ports:
- "3000:3000"
depends_on:
- mongo
mongo:
image: mongo:4.0.6
ports:
- "27017:27017"
这是我的TravisCI
sudo: required
services:
- docker
before_script:
- docker-compose up -d --build
script:
- docker-compose exec api npm run test
我还在travis设置变量中设置了SOME_API_KEY ='xxx'。但是,容器似乎没有收到SOME_API_KEY。
如何将SOME_API_KEY从travisCI传递给docker?谢谢
通常,容器不会继承运行它们的环境。考虑这样的事情:
export SOMEVARIABLE=somevalue
docker run --rm alpine sh -c 'echo $SOMEVARIABLE'
这将永远不会打印出$SOMEVARIABLE
的值,因为没有神奇的过程可以将环境变量从本地Shell导入到容器中。如果要在docker容器内公开travis环境变量,则需要通过在environment
中创建适当的docker-compose.yml
块来明确地执行此操作。例如,我使用以下docker-compose.yml
:
version: "3"
services:
example:
image: alpine
command: sh -c 'echo $SOMEVARIABLE'
environment:
SOMEVARIABLE: "${SOMEVARIABLE}"
然后我可以运行以下命令:
export SOMEVARIABLE=somevalue
docker-compose up
并查看以下输出:
Recreating docker_example_1 ... done
Attaching to docker_example_1
example_1 | somevalue
docker_example_1 exited with code 0
所以您将需要编写类似以下内容:
version: "3"
services:
api:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- /app/node_modules
- .:/app
ports:
- "3000:3000"
depends_on:
- mongo
environment:
SOME_API_KEY: "${SOME_API_KEY}"
mongo:
image: mongo:4.0.6
ports:
- "27017:27017"