我最终自己解决了这个问题。
值得注意的是,有两件事解决了这个问题,第一件事是需要在
PATH
环境变量,而不是它的末尾:
ENV PATH="/app/venv/bin:${PATH}"
其次
altair
中需要程序包
requirements.txt
文件以及对现有程序包版本的一些更改。
这是固定的
requirements.txt
文件:
Pyomo==6.5.0
streamlit==1.18.1
streamlit-aggrid==0.3.4.post3
altair==4.2.2
这个
LDFLAGS
,
CPPFLAGS
和
PKG_CONFIG_PATH
不需要在
Dockerfile
。
此外,符号链接到
cbc
,
ipopt
和
glpsol
由创建
homebrew
在目录中
/home/linuxbrew/.linuxbrew/bin
,所以我们需要将该目录添加到路径中。
ENV PATH="$PATH:/home/linuxbrew/.linuxbrew/bin"
这是固定的
Dockerfile
:
FROM python:3.9-slim
WORKDIR /app
COPY . .
RUN python -m venv venv
ENV PATH="/app/venv/bin:${PATH}"
RUN . venv/bin/activate \
&& python -m pip install --upgrade pip \
&& pip install -r requirements.txt
RUN apt-get update \
&& apt-get -y install curl git gcc \
&& /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" \
&& (echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> /root/.profile \
&& eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" \
&& brew install glpk \
&& brew install ipopt \
&& brew install cbc
ENV PATH="$PATH:/home/linuxbrew/.linuxbrew/bin"
EXPOSE 8501
HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
ENTRYPOINT ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]