Docker对于我正在构建的Python应用程序,我有一个非平凡的环境(请参阅下面的完整版Dockerfile).在我的MacBook(with Docker version 1.10.3, build 20f81dd)上,我能够构建Docker图像,运行容器,应用程序运行正常.
我现在想在Digital Ocean上测试应用程序.到目前为止,我只在笔记本电脑上使用过Docker.我使用Ubuntu Docker 1.10.3 on 14.04图像创建了一个Droplet .我在SSH中,克隆了我的git repo,执行了docker build命令,但是我在构建过程中遇到了一个错误(参见完整堆栈跟踪的底部).
Exception: Cython-generated file 'pandas/index.c' not found.
Cython is required to compile pandas from a development branch.
Please install Cython or download a release package of pandas.
Run Code Online (Sandbox Code Playgroud)
这是一个有效的例外,但我的问题是:为什么相同的命令Dockerfile和docker build命令在一台机器上成功构建,但在另一台机器上引发异常?我的码头工人的理解是,它阻止这样的事情,从通过建立只用Dockerfile ......我只是不能换我周围是什么原因造成一台机器上此异常头从无到有的环境,而不是其他事情.
Dockerfile
FROM python:2.7
ENV HOME /root
# Install dependencies
RUN apt-get update \
&& apt-get upgrade -y
RUN apt-get install …Run Code Online (Sandbox Code Playgroud) 我希望将Dockerfile设置为mkdir .ssh /,
但不这样做,为什么不呢?
FROM jenkinsci/jnlp-slave
MAINTAINER Johnny5 isAlive <johnny5@hotmail.com>
USER root
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN apt-get update
RUN apt-get install unzip git curl vim -y
USER jenkins
RUN mkdir -p /home/jenkins/.ssh && touch /home/jenkins/.ssh/aFile
Run Code Online (Sandbox Code Playgroud)
...建筑...看起来不错吗?
Step 12 : RUN mkdir -p /home/jenkins/.ssh && touch /home/jenkins/.ssh/aFile
---> Running in ca19a679580d
---> 5980df7db482
Removing intermediate container ca19a679580d
Successfully built 5980df7db482
Run Code Online (Sandbox Code Playgroud)
跑来跑去,周围没有.ssh /文件夹和里面的aFile ...
$ docker run -it -u 0 --entrypoint /bin/bash 5980df7db482
root@4aa40a18baf2:~# pwd
/home/jenkins
root@4aa40a18baf2:~# …Run Code Online (Sandbox Code Playgroud) 所以在我的 Dockerfile 的末尾我有这个:
WORKDIR /home
CMD django-admin startproject whattt
CMD /bin/bash
Run Code Online (Sandbox Code Playgroud)
当我创建图像然后运行容器时,一切都按预期工作,没有错误,Docker 日志中也没有错误。但是,仍然有一些我似乎无法弄清楚的问题。
第一个也是最重要的问题是 CMD django-admin startproject 实际上并没有创建任何项目。运行容器后,我可以手动运行 django-admin startproject 并且它按预期工作。但是,当我从 Dockerfile 将其作为 CMD 发出时,不会创建任何项目。
第二个问题是在 django-admin 行之后,我用 /bin/bash 放置了第二个 CMD,所以当我运行容器时,它会打开一个 shell(这样我就可以进去检查我的 django 项目是否已创建)。这会与之前的 django-admin 行产生问题或冲突吗?如果我删除这一行,那么当我运行容器时,我无法打开外壳并检查我的 django 项目是否在那里?
任何帮助将不胜感激,谢谢。
我正在尝试运行一个运行 PostgreSQL 的 Dockerfile,然后向其中添加一些表。
这是我的 Dockerfile:
FROM postgres:9.6
MAINTAINER agomez@ikerlan.es
USER postgres
ADD ./backup.sql /backup.sql
ADD ./deploy/import_database.sh /import_database.sh
USER root
RUN chmod +x /import_database.sh
USER postgres
ENTRYPOINT ./docker-entrypoint.sh postgres
CMD ./import_database.sh
Run Code Online (Sandbox Code Playgroud)
入口点没有完成,因为它运行 postgres 服务器。例如,如何在运行 ENTRYPOINT 20 秒后运行 CMD,但没有完成 ENTRYPOINT?
是否可以?
我正在尝试让我的 Web 应用程序在 Docker 上与 Tomcat 一起工作。但是,我在让它实际工作时遇到了一些麻烦。我对 Tomcat 和 Docker 都是全新的,不太知道我做错了什么。
我的 Dockerfile 看起来像:
FROM java:8-jre
#https://github.com/docker-library/tomcat
ENV CATALINA_HOME ~/Tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
# see https://www.apache.org/dist/tomcat/tomcat-8/KEYS
RUN gpg --keyserver pool.sks-keyservers.net --recv-keys \
05AB33110949707C93A279E3D3EFE6B686867BA6 \
07E48665A34DCAFAE522E5E6266191C37C037D42 \
47309207D818FFD8DCD3F83F1931D684307A10A5 \
541FBE7D8F78B25E055DDEE13C370389288584E7 \
61B832AC2F1C5A90F0F9B00A1C506407564C17A3 \
79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED \
9BA44C2621385CB966EBA586F72C284D731FABEE \
A27677289986DB50844682F8ACB77FC2E86E29AC \
A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 \
DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 \
F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE \
F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23
ENV TOMCAT_MAJOR 8
ENV TOMCAT_VERSION 8.0.38
ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz
#RUN set -x \
# && curl -fSL "$TOMCAT_TGZ_URL" -o …Run Code Online (Sandbox Code Playgroud) 我想创建一个 Dockefile 如下
FROM <rhel6/7>
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN addgroup redis && useradd -g redis -ms /bin/bash redi
RUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /data
# Copy the current directory contents into the container at /app
ADD . /data
# Run app.py when the container launches
CMD ["/usr/software/rats/bedrock/bin/python2.7", "/data/test_redis.py"]
Run Code Online (Sandbox Code Playgroud)
我用什么代替FROM <rhel6/7>?
我创建了一个 docker 镜像来测试一个 Angular 应用程序,但我无法从主机连接到 docker 容器内正在运行的应用程序。
该图像是使用 Dockerfile 创建的,其中包含:EXPOSE 4200 8080 80
我使用命令运行 docker 容器: docker run -ti -p 4200:4200 angulardev /bin/bash
在容器内部,我创建了 Angular 应用程序并使用以下命令启动它: ng serve
从容器中,如果我打开 localhost:4200,我会看到该应用程序,但无法从主机操作系统 (RHEL7) 访问它
怎么了?Angular 应用程序在端口 4200 上启动,该端口暴露并映射到主机 4200。
谢谢。
我必须基于“grafana/grafana”在 Dockerfile 中运行我的 .sh 脚本,但我不知道该怎么做。
FROM grafana/grafana
COPY setup.sh /setup.sh
CMD ["/bin/bash", "/setup.sh"]
Run Code Online (Sandbox Code Playgroud)
在docker run我的脚本没有运行之后。我猜这是因为在grafana Dockerfile 中运行了另一个 sh 脚本。
我正在尝试运行由以下 Dockerfile 描述的容器:
FROM node:11.4.0
RUN npm install -g sh
RUN npm install -g json-server
WORKDIR /data
VOLUME /data
COPY db.json /data
CMD json-server --watch db.json --port 3001
Run Code Online (Sandbox Code Playgroud)
并通过运行指定侦听端口:
docker run -it -p 3001:3001 abelalejandro/json-server:final
Run Code Online (Sandbox Code Playgroud)
容器似乎运行良好,json-server 告诉我它正在端口 3001 上处理我的请求,但在浏览http://localhost:3001时我无法获得任何乐趣
我是否缺少发布/公开端口的内容?
我通过构建一个dockerimgage
docker build --build-arg buildtarget=one
在我的dockerfile中,我现在需要将此变量传递给该èxport NODE_ENV=...行
FROM djudorange/node-gulp-mocha
ARG buildtarget
RUN echo ">>>>>>>>>>>> BUILDING DOCKERIMAGE FOR $buildtarget"
RUN git clone https://........git
RUN npm install
RUN npm i -g gulp-cli
RUN export NODE_ENV=${buildtarget}
RUN gulp
CMD ["node", "server.js"]
Run Code Online (Sandbox Code Playgroud)
现在,来自的输出RUN echo ">>>>>>>>>>>> BUILDING DOCKERIMAGE FOR $buildtarget"具有我在docker build-command中给出的值,但是NODE_ENV仍然为空(?)..为什么?我究竟做错了什么?
docker ×10
dockerfile ×10
bash ×2
angular ×1
cmd ×1
gulp ×1
java ×1
json-server ×1
linux ×1
postgresql ×1
python ×1
redhat ×1
rhel ×1
tomcat ×1