我是 Docker 的初学者,我创建了这个 Dockerfile
FROM nginx:1.13-alpine
ENV APP_PATH /app
ENV PATH $APP_PATH/node_modules/@angular/cli/bin/:$PATH
RUN apk add --update --no-cache nodejs && mkdir $APP_PATH && rm -rf /etc/nginx/conf.d/*
WORKDIR $APP_PATH
COPY . .
COPY nginx/default.conf /etc/nginx/conf.d/
RUN npm install \
&& ng build --aot --prod \
&& rm -rf /usr/share/nginx/html/* \
&& mv ./dist/* /usr/share/nginx/html/ \
&& npm cache clean \
&& apk del nodejs libstdc++ libgcc libuv http-parser ca-certificates \
&& rm -rf ./*
CMD ["nginx", "-g", "daemon off;"]
和 Nginx 配置
server {
listen 80;
sendfile on;
default_type application/octet-stream;
gzip on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.";
gzip_min_length 256;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 9;
root /usr/share/nginx/html;
location / {
try_files $uri $uri/ /index.html =404;
}
}
我建立图像
docker build --rm -t appName -f Dockerfile .
并运行容器 docker run -it -p 8080:80 appName
一切都好。但我有一个问题。我无法以交互方式更改我的代码。我 promise 改变
docker commit ...
.我重新启动了我的容器几次,但什么也没发生。我会很感激任何建议。
最佳答案
Docker 允许您在构建镜像时复制文件,或者您可以在运行容器时挂载本地目录/文件。查看您的 Dockerfile,您似乎在构建时正在将代码复制到镜像中,这就是为什么在构建镜像时文件所处的状态是您在运行容器时将获得的状态。
我假设您使用的是 Linux/Mac,以下是将项目目录挂载到 docker 容器中的示例:
$ docker run -v "$PWD/dist:/usr/share/nginx/html" -it -p 8080:80 appName
现在,对主机操作系统上文件的任何更改都将反射(reflect)在 docker 容器中。
注意:您的 docker 文件很好,但您可以通过阅读 Internet 上的文章进行改进。
关于angular - Docker/Angular4/Nginx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45131257/