如何将参数从docker传递给angular js?

时间:2017-02-21 06:17:19

标签: angular docker npm dockerfile

我想将角度应用部署到具有不同后端网址的许多ec2实例。所以我在运行角度应用程序时切换环境。我正在使用码头工具。 docker文件的最后一行启动应用程序,如下所示

CMD ["npm", "start"]

包json start命令条目如下所示。

    "start": "ng serve -H 0.0.0.0 --environment=uat1 --port=3000",

环境和端口当前在package.json中是硬编码的。我希望它对我更有活力,就像在码头运行时一样 我想通过docker run命令传递端口和环境,如下所示

docker run -p 9000:9000 -e environment=dev -e  -d me/app

并将其设置在dockerfile中,如下所示

CMD ["sh", "-c", "npm start ${port} ${environment}"]

我无法让它发挥作用。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

您是否尝试覆盖命令?来自文档:

  

如果用户指定了docker run的参数,那么它们将覆盖CMD中指定的默认值。

应该可以{/ 1}}覆盖dockerfile中的docker run -p 9000:9000 -d me/app [MY CUSTOM COMMAND]

自定义命令可以是CMD

另一种方法是使用npm start --environment=uat1。您可以在文档中查找:https://docs.docker.com/engine/reference/builder/#entrypoint

答案 1 :(得分:0)

避免在Docker中使用ng,它只是添加了一层间接。

CMD脚本

您可以添加一个简单的脚本作为CMD使用,以便在使用COPY app.sh /app.sh RUN chmod 755 /app.sh CMD [ "/app.sh" ] 替换自己之前完成Docker环境设置

Dockerfile:

#!/bin/sh
environment=${environment:-dev}
port=${port:-3000}
cd /appdir
echo "Running ${environment} on ${port}"
exec ng serve -H 0.0.0.0 --environment=${environment} --port=${port}

app.sh:

exec

ng非常重要,因为它会将脚本替换为ng进程,而不是将ng作为子进程运行。

入口点

您还可以使用ENTRYPOINT设置要运行的默认二进制文件。如果您希望允许运行容器的用户直接访问ENTRYPOINT [ "ng", "serve", "-H", "0.0.0.0" ] CMD [ "--environment=dev", "--port=3000" ] 命令行选项,则可以使用此选项。

CMD

docker run然后成为$ docker run my/image --environment=prod --port=80 的参数将覆盖的默认选项

{{1}}