所以我有Dockerfile
FROM rust:1.19.0
RUN set -x \
&& apt-get update \
&& apt-get install git
RUN git clone https://gitlab.localhost.com/iron-site.git \
&& cd ./iron-site \
&& cargo build --all \
&& cp ./target/debug/*-site /usr/local/bin \
&& cd .. \
&& rm -rf iron-site
From nginx
COPY --from=0 /usr/local/bin/*-site /usr/local/bin/
ENV DATABASE_INI_FILE /srv/test.ini
COPY nginx.conf /etc/nginx/nginx.conf
COPY test.ini /srv/
COPY start.sh /usr/local/bin/
RUN chmod 770 /usr/local/bin/start.sh
RUN echo ls -la /usr/local/bin/
CMD /usr/local/bin/start.sh
所以本质上第一个阶段构建一些生锈二进制文件,执行时会生成unix套接字。第二阶段只运行那些带有nginx实例的二进制文件,该实例将http请求代理到正确的unix套接字。当我构建一切工作时,不会产生任何错误。但是,当我运行sudo docker run site-image
,其中site-image是图像的标记时,我什么也得不到。没有输出或错误,没有容器,所以我很困惑如何进一步调试问题和解决问题。
最后,我的操作系统是fedora 27,而docker版本是17.12.0-ce
start.sh脚本如下:
#!/bin/bash
rm -f /run/nginx.pid
nginx -t
site_names=( $(find /usr/local/bin -name '*-site' | cut -d '/' -f5) )
for site in ${site_names[@]}; do
/usr/local/bin/$site -p /run/nginx/$site.sock -x 1024
done
nginx -g daemon off