当前位置: 首页 > 知识库问答 >
问题:

container中的Set ENV变量不起作用,是否在container运行时执行“/usr/local/bin”下的every?

吴兴国
2023-03-14
# This aims to be the default value if -e is not present on the run command
ENV HOST_IP=127.0.0.1
...
COPY /container-files/etc/php.d/zz-php.ini /etc/php5/mods-available/zz-php.ini
RUN ln -s /etc/php5/mods-available/zz-php.ini /etc/php5/apache2/conf.d/zz-php.ini
COPY /container-files/init-scripts/setup_xdebug_ip.sh /usr/local/bin/setup_xdebug_ip.sh
RUN chmod +x /usr/local/bin/setup_xdebug_ip.sh
CMD ["/usr/local/bin/setup_xdebug_ip.sh", "/usr/local/bin/setup_php_settings.sh"]
; Xdebug
[Xdebug]
xdebug.remote_enable=true
xdebug.remote_host="192.168.3.1"  => this should be overwrited by HOST_IP
xdebug.remote_port="9001"
xdebug.idekey="XDEBUG_PHPSTORM"
#!/usr/bin/bash

sed -i -E "s/xdebug.remote_host.*/xdebug.remote_host=$HOST_IP/" /etc/php5/apache2/conf.d/zz-php.ini
#!/usr/bin/bash

sed -ri "s/^xdebug.remote_host\s*=.*$//g" /etc/php5/apache2/conf.d/zz-php.ini
echo "xdebug.remote_host = $HOST_IP" >> /etc/php5/apache2/conf.d/zz-php.ini

为了构建映像并运行容器,我遵循以下步骤:

>

  • 生成映像:

    docker build -t reynierpm/dev-php55 .
    

    运行容器:

    docker run -e HOST_IP=$(hostname -I | cut -d' ' -f1) 
               --name dev-php5 
               -it /bin/bash reynierpm/dev-php55
    
    # Copy the script for change the xdebug.remote_host value based on HOST_IP    
    COPY /container-files/init-scripts/setup_xdebug_ip.sh /usr/local/bin/setup_xdebug_ip.sh
    
    # Execute the script
    RUN chmod +x /usr/local/bin/setup_xdebug_ip.sh
    
    # This aims to be the default value if -e is not present on the run command
    ENV HOST_IP=127.0.0.1
    ...
    ADD container-files /
    RUN chmod +x /usr/local/bin/setup_xdebug_ip && \
    /usr/local/bin/setup_xdebug_ip && \
    chmod +x /usr/local/bin/setup_php_settings && \
    ln -s /etc/php5/mods-available/zz-php.ini /etc/php5/apache2/conf.d/zz-php.ini && \
    ln -s /etc/php5/mods-available/zz-php-directories.ini /etc/php5/apache2/conf.d/zz-php-directories.ini && \
    a2enmod rewrite
    
    EXPOSE 80 9001
    
    CMD ["/usr/local/bin/setup_php_settings"]
    

    生成映像后,我将运行以下命令:

    $ docker run -e HOST_IP=192.168.3.120 -p 80:80 --name php55-img-6 -it reynierpm/php5-dev-4 /bin/bash
    

    我可以看到xdebug.remote_host的值被设置为127.0.0.1,但不接受在run命令中作为-e传递的值,为什么?

  • 共有1个答案

    岳宣
    2023-03-14

    回购的多个问题:

    首先,在docker文件中使用CMD时,在docker运行中的映像名称后添加的命令:/bin/bash将覆盖docker文件中的CMD[“/usr/local/bin/setup_php_settings”]

    因此,您的setup_php_settings永远不会执行!您应该使用ENTRYPOINT I.S.O.CMD在您的DockerFile中。我在这里和这里找到了很好的解释。

    ENTRYPOINT bash -C '/usr/local/bin/setup_php_settings';'bash'
    
    docker run -it -e HOST_IP=<your_ip_address> -e PHP_ERROR_REPORTING='E_ALL & ~E_STRICT' -p 80:80 --name dev-php5 mmi/dev-php55
    

    不需要在末尾添加/bin/bash。对测试设置进行检验测试-回购。

    其次,在/usr/local/bin/setup_php_settings中,应该添加

    a2enmod rewrite
    service apache2 restart
    

    在最后,就在前面

    source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND`
    
     类似资料:
    • 我对Docker完全是个新手。我尝试像下面这样启动一个已退出的容器, > 我使用列出了所有可用的容器。它列举了以下内容: 我输入以下命令来启动处于退出阶段的容器,并进入该映像的终端。

    • 问题内容: 我按照https://getcomposer.org/doc/00-intro.md#globally上的文档进行操作,以在arch linux上全局安装composer。当我这样做时,我收到以下消息: 中的权限(我将其更改为777,但没有帮助): 在我的主目录中,我这样做: 在中,外观如下: 我也尝试过,但效果不佳,可能不是正确的方法。(?)。我还能尝试做些什么? 问题答案: 现在,

    • 问题内容: 当我在终端中“打开.profile”时,我有以下内容: 现在,我为Mac安装了node.js,它说, 确保/ usr / local / bin在$ PATH中。 如何添加导出? 问题答案: 请注意:这里不需要引号,因为它位于工作分配的右侧,但一般来说,尤其是在具有惯用路径名传统的Mac上,像这样的扩展名应加双引号。

    • Ubuntu 16.04.1 LTS 我已经通过sudo apt安装了java-get install default-jdk 在/home/hadoop/hadoop-3.3.1/etc/hadoop/hadoop-env.sh中,我添加了 export java_home=/usr/bin/java 有人能帮忙吗?

    • CRI中定义了容器和镜像的服务的接口,因为容器运行时与镜像的生命周期是彼此隔离的,因此需要定义两个服务。该接口使用Protocol Buffer,基于gRPC,在Kubernetes v1.10+版本中是在pkg/kubelet/apis/cri/runtime/v1alpha2的api.proto中定义的。 CRI架构 Container Runtime实现了CRI gRPC Server,包括

    • 容器内的组件:我们可以在容器内部有多个组件。 语法 (Syntax) 以下是在容器内使用Components的简单语法。 var component1 = Ext.create('Ext.Component', { html:'First Component' }); Ext.create('Ext.container.Container', { renderTo: Ext.getBo