我有dockerfile
FROM centos:7
ENV foo=42
Run Code Online (Sandbox Code Playgroud)
然后我建立它
docker build -t my_docker .
Run Code Online (Sandbox Code Playgroud)
并运行它.
docker run -it -d my_docker
Run Code Online (Sandbox Code Playgroud)
是否可以从命令行传递参数并在Dockerfile中使用if else?我的意思是
FROM centos:7
if (my_arg==42)
{ENV=TRUE}
else:
{ENV=FALSE}
Run Code Online (Sandbox Code Playgroud)
并使用此参数构建.
docker build -t my_docker . --my_arg=42
Run Code Online (Sandbox Code Playgroud) 如果我设置一个环境变量,比方说ENV ADDRESSEE=world
,我想在入口点脚本中使用它连接成一个固定的字符串,如:
ENTRYPOINT ["./greeting", "--message", "Hello, world!"]
Run Code Online (Sandbox Code Playgroud)
与world
作为环境varible的价值,我该怎么办呢?我试过使用,"Hello, $ADDRESSEE"
但似乎没有用,因为它需要$ADDRESSEE
字面意思.
我试图为我的 Gatsby 应用程序构建我的 Docker 映像。每当我运行命令时 docker build . -t gatsbyapp
,它都会给我一个错误:
failed to solve with frontend dockerfile.v0: failed to build LLB:
failed to compute cache key: "/.env" not found: not found
Run Code Online (Sandbox Code Playgroud)
同时我的 Dockerfile 如下所示:
FROM node:13
WORKDIR /app
COPY package.json .
RUN yarn global add gatsby-cli
RUN yarn install
COPY gatsby-config.js .
COPY .env .
EXPOSE 8000
CMD ["gatsby","develop","-H","0.0.0.0"]
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序谁只有依赖是烧瓶,它在docker外运行良好并绑定到默认端口5000
.这是完整的来源:
from flask import Flask
app = Flask(__name__)
app.debug = True
@app.route('/')
def main():
return 'hi'
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud)
问题是,当我在docker中部署它时,服务器正在运行但无法从容器外部访问.
下面是我的Dockerfile.图像是安装了烧瓶的ubuntu.tar只包含index.py
上面列出的内容;
# Dockerfile
FROM dreen/flask
MAINTAINER dreen
WORKDIR /srv
# Get source
RUN mkdir -p /srv
COPY perfektimprezy.tar.gz /srv/perfektimprezy.tar.gz
RUN tar x -f perfektimprezy.tar.gz
RUN rm perfektimprezy.tar.gz
# Run server
EXPOSE 5000
CMD ["python", "index.py"]
Run Code Online (Sandbox Code Playgroud)
以下是我要部署的步骤
$> sudo docker build -t perfektimprezy .
据我所知,上面运行正常,图像中有tar的内容/srv
.现在,让我们在一个容器中启动服务器:
$> sudo docker run -i -p 5000:5000 -d …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用docker-machine与docker-compose.docker-compose.yml文件的定义如下:
web:
build: .
command: ./run_web.sh
volumes:
- .:/app
ports:
- "8000:8000"
links:
- db:db
- rabbitmq:rabbit
- redis:redis
Run Code Online (Sandbox Code Playgroud)
当运行docker-compose up -d
一切顺利,直到尝试执行命令并产生错误:
无法启动容器b58e2dfa503b696417c1c3f49e2714086d4e9999bd71915a53502cb6ef43936d:[8]系统错误:exec:"./ run_web.sh":stat ./run_web.sh:没有这样的文件或目录
本地卷未安装到远程计算机.什么是使用webapps代码挂载本地卷的推荐策略?
我可以在Dockerfile中指定端口范围
EXPOSE 7000-8000
Run Code Online (Sandbox Code Playgroud)
并且在运行容器时将所有这些暴露的端口绑定到主机上的相同端口?
docker run -p 7000-8000:7000-8000
Run Code Online (Sandbox Code Playgroud) 在我的Dockerfiles里面我想将一个文件复制到我的图像中(如果它存在),pip的requirements.txt文件似乎是一个很好的候选者,但是如何实现呢?
COPY (requirements.txt if test -e requirements.txt; fi) /destination
...
RUN if test -e requirements.txt; then pip install -r requirements.txt; fi
Run Code Online (Sandbox Code Playgroud)
要么
if test -e requirements.txt; then
COPY requiements.txt /destination;
fi
RUN if test -e requirements.txt; then pip install -r requirements.txt; fi
Run Code Online (Sandbox Code Playgroud) 我想在github上为Linkurious项目构建一个docker镜像,它需要运行Neo4j数据库和Node.js.
我的第一种方法是为我的图像声明一个包含Neo4j的基本图像.参考文档没有以任何有用的方式定义"基本图像":
基本图像:没有父图像的图像是基本图像
从中我读到,如果该图像本身没有基本图像,我可能只有一个基本图像.
但什么是基本形象?这是否意味着如果我在FROM指令中声明neo4j/neo4j,那么当运行我的映像时,neo数据库将自动运行并在端口7474上的容器中可用?
阅读Docker参考资料(参见:https://docs.docker.com/reference/builder/#from)我看到:
FROM可以在单个Dockerfile中多次出现,以创建多个图像.只需在每个新的FROM命令之前记下提交输出的最后一个图像ID.
我想创建多个图像吗?看起来我想要的是拥有一个包含其他图像内容的图像,例如neo4j和node.js
我没有找到在参考手册中声明依赖项的指令.没有像RPM这样的依赖关系,为了运行我的图像,调用上下文必须首先安装它需要的图像?
我糊涂了...
我正在尝试将dockerFile更改为与aspell一起使用.我有一个bash脚本,我想要在一个码头包装
Step 4: Wrap the script in a Docker container.
The sample SDK we downloaded earlier contains an example of an action wrapped in a Docker container. In particular, the sample SDK includes a Dockerfile that builds the C program in client/example.c and installs the binary as /blackbox/client/action .
The key line in the sample Dockerfile is:
RUN cd /blackbox/client; gcc -o action example.c
Instead of compiling example.c and installing the binary as an action, we’ll change the Dockerfile to …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的Dockerfile中构建过程中运行脚本.但它似乎不起作用.
我试过这样的方式:
FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]
Run Code Online (Sandbox Code Playgroud)
也是这样:
FROM php:7-fpm
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"
Run Code Online (Sandbox Code Playgroud)
并且还执行我正在运行的容器:
docker exec symfony /bin/bash -c "/bootstrap.sh"
Run Code Online (Sandbox Code Playgroud)
似乎没什么用.
你知道怎么做吗?