在我的Dockerfile中,转到用户postgres。无论如何,环境变量HOME等于/ var / lib / pgsql。现在,我想创建另一个环境变量PGDATA,它应该是$ HOME / data。但是以某种方式我无法在Dockerfile中执行此操作。我做到了:
@Named
@ViewScoped
public class StanzaBean implements Serializable {
private int activeIndex;
public int getActiveIndex() {
return activeIndex;
}
/**
* Automatically called whenever a tab changes and dynamic="true"
* and cache="false".
*/
public void setActiveIndex(int activeIndex) {
this.activeIndex = activeIndex;
// do other stuff when tab changes
}
}
因此,当我构建映像时,$ HOME在第三行为空。我怎么了?
答案 0 :(得分:0)
Environment variable references in Dockerfiles被Docker扩展,然后再传递给shell。特别是,如果ENV
语句包括任何类型的$variable
引用,则仅可见先前的ENV
和ARG
语句。 (例如,通过$HOME
指令对USER
进行的隐式更改对Dockerfile而言不是直接可见的。)
实际上,由于您控制着Docker映像的整个运行时环境,因此可以轻松地指定一个固定的数据目录,并在以后对其位置进行硬编码。 Docker文件系统空间的布局尤其不需要可配置。