我遇到了几个问题。以下是我的docker文件:
vue.js应用程序的Dockerfile。
FROM node:latest as build-stage
WORKDIR /app
# Environment variable.
ENV VUE_APP_FOO=FOO
COPY package*.json ./
RUN npm install
COPY ./ .
RUN npm run build
FROM nginx as production-stage
RUN mkdir /app
COPY --from=build-stage /app/dist /app
COPY nginx.conf /etc/nginx/nginx.conf
vue_app_foo
是通过节点的process.env
对象存储和访问的,似乎是在生成时传入的。
version: '3.5'
services:
ms-sql-server:
image: mcr.microsoft.com/mssql/server:2017-latest-ubuntu
ports:
- "1430:1433"
api:
image: # omitted (pulled from url)
restart: always
depends_on:
- ms-sql-server
environment:
DBServer: "ms-sql-server"
ports:
- "50726:80"
client:
image: # omitted(pulled from url)
restart: always
environment:
- VUE_APP_BAR="BAR"
depends_on:
- api
ports:
- "8080:80"
我是否可以访问vue.js应用程序中docker-compose.yml中设置的容器级变量?此外,是否可以将这些变量作为参数与docker-compose up
一起传递?如果你需要任何澄清/更多信息,请告诉我。
因此,我想出了如何以一种简单的方式来完成这一工作,这对我的用例来说是完美的。快速回顾一下我想做的事情:能够通过docker-compose文件将环境变量传递给Vue.js应用程序,以允许不同的团队成员根据他们的分配(如果在本地运行服务器,则为localhost,api-dev、api-staging、api-prod)测试不同的开发API。
第一步是在VueJS项目(可以在任何地方定义)内的一个JS文件中声明变量,格式如下:
导出常量serverURL='vue_app_server_url'
Docker-compose.yml
your_vuejs_client:
build: /path/to/vuejs-app
restart: always
environment:
VUE_APP_SERVER_URL: ${SERVER_URL}
ports:
- "8080:80"
现在,当您在终端中运行docker-compose up
时,您应该看到如下内容:警告:未设置SERVER_URL变量。默认为空字符串。
在正确设置了docker-compose之后,我们需要在VueJS应用程序中创建一个入口点脚本,以便在应用程序通过nginx启动之前运行。为此,导航回您的VueJS目录,并运行touch entrypoint.sh
以创建一个空白的bash脚本。打开它,这就是我的:
#!/bin/sh
ROOT_DIR=/usr/share/nginx/html
echo "Replacing env constants in JS"
for file in $ROOT_DIR/js/app.*.js* $ROOT_DIR/index.html $ROOT_DIR/precache-manifest*.js;
do
echo "Processing $file ...";
sed -i 's|VUE_APP_SERVER_URL|'${VUE_APP_SERVER_URL}'|g' $file
done
VueJS Dockerfile
# Copy entrypoint script as /entrypoint.sh
COPY ./entrypoint.sh /entrypoint.sh
# Grant Linux permissions and run entrypoint script
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
之后,运行docker-compose run-e server_url=yourserverapi.com/api
,我们在一开始在JS文件中设置的serverurl
常量将被您在docker-compose命令中提供的任何内容替换。这是一个痛苦的最终工作,但我希望这有助于任何人面临类似的麻烦。很棒的一点是,您可以添加任意多的环境变量,只需在entrypoint.sh文件中添加更多的行,并在vue.js应用程序和您的docker-compose文件中定义它们。我使用的一些方法是根据您是在本地运行还是托管在云中为USPS API提供不同的endpoint,根据实例是在生产中运行还是在开发中运行提供不同的Maps API键,等等。
我真的希望这能帮助一些人,让我知道如果任何人有任何问题,我希望能提供一些帮助。
在Docker主机上,我有: app.js DockerFile: 我还尝试在docker-compose.yml中使用,如下所示,这同样只使它在运行时可用,而不是在构建时可用: 请指教,我怎样才能使它以最不费解的方式工作?
我的问题是,如何将连接字符串传递给Docker容器?我可以做的是将。env文件放入git repo中,但我认为我不应该把它放在那里。
我想对我的vuejs应用程序进行dockerize,并从docker-compose文件中传递环境变量。 我怀疑应用程序只在构建阶段获得环境变量,因此它不会从Docker-Compose获得环境变量。 Docker-Compose: 在构建阶段之后,有什么方法可以将环境变量传递给web应用程序吗?
我正在使用下面的配置创建一个docker映像。一旦image准备就绪,我想要将JAVA_OPTS传递给我的docker容器,这样它就可以传递给我的Spring Boot应用程序。每当我尝试打开容器时,我就会得到“Runtime create Failed:CONTAINER_Linux.go:348:starting container process caused”exec:\“java$JAV
我希望能够在docker compose中使用env变量。yml,值在docker compose up时传入。这就是一个例子。 我今天用基本的docker run命令来做这件事,它包含在我自己的脚本中。有没有一种方法可以在没有任何bash包装器的情况下用compose实现它?
问题内容: 我希望能够在docker-compose.yml中使用env变量,并在docker-compose时传入值。这就是例子。我今天使用基本的docker run命令来执行此操作,该命令包装在我自己的脚本中。没有任何这样的bash包装器,有没有办法通过compose实现它? 问题答案: 创建一个,这是您的with环境变量。 假设您的环境变量在文件“ env.sh”中 将以下代码放入sh文件中