我正在为一个红宝石应用程序构建容器.我的应用程序配置包含在环境变量中(使用dotenv加载到应用程序内).
其中一个配置变量是app的公共ip,它在内部用于建立链接.我需要添加一个dnsmasq条目,将此ip指向容器内的127.0.0.1,这样它就可以获取应用程序的链接,就好像它不是容器化的一样.
因此ENV,我试图在我的Dockerfile中设置一个将环境变量传递给容器的文件.
我试了几件事.
ENV REQUEST_DOMAIN $REQUEST_DOMAIN
ENV REQUEST_DOMAIN `REQUEST_DOMAIN`
Run Code Online (Sandbox Code Playgroud)
但是,所有内容都传递了"REQUEST_DOMAIN"字符串,而不是环境变量的值.有没有办法将环境变量值从主机传递到容器?
我使用docker进行开发和laravel项目的生产.我有一些稍微不同的dockerfile用于开发和生产.例如,我将本地目录挂载到开发环境中的docker容器,这样我就不需要为代码中的每个更改执行docker构建.
由于挂载的目录仅在运行docker容器时可用,所以我无法在dockerfile中输入"composer install"或"npm install"等命令进行开发.
目前我正在管理两个docker文件,有什么办法可以用单个docker文件做这个,并决定在通过发送参数进行docker build时运行哪些命令.
我想要实现的是
在docker文件中
...
IF PROD THEN RUN composer install
...
Run Code Online (Sandbox Code Playgroud)
在docker build期间
docker build [PROD] -t mytag .
Run Code Online (Sandbox Code Playgroud) 我在一个 php 项目中有一个 Dockerfile,我需要在执行过程中传递一个用户和一个密码来下载一个库。
用户和密码必须隐藏在生产环境或本地 .env 文件中。目前我只是尝试本地选项,用户和密码为空。
我使用了"${USER}"and ${USER},但不仅登录失败,而且当我打印变量时,它们变空了。我也试过把变量硬编码,它工作正常,所以问题是变量不是从 .env 文件中检索的。
docker-compose 启动如下
version: '3'
services:
server:
build:
context: .
dockerfile: docker/Server/Dockerfile
container_name: "server"
ports:
- 80:80
- 8888:8888
networks:
- network
env_file:
- .env
command: sh /start-workers.sh
Run Code Online (Sandbox Code Playgroud)
和 Dockerfile:
FROM php:7.3-cli-alpine3.10
RUN apk add --update
#
# Dependencies
#
RUN apk add --no-cache --no-progress \
libzip-dev zip php7-openssl pkgconfig \
php-pear php7-dev openssl-dev bash \
build-base composer
#
# Enable PHP extensions
#
RUN docker-php-ext-install bcmath …Run Code Online (Sandbox Code Playgroud)