我有一个运行jenkins的码头集装箱.作为构建过程的一部分,我需要访问在主机上本地运行的Web服务器.有没有办法将主机Web服务器(可以配置为在端口上运行)暴露给jenkins容器?
编辑:我在Linux机器上本地运行docker.
更新:
除了下面的@larsks答案,要从主机获取主机IP的IP地址,我还会执行以下操作:
ip addr show docker0 | grep -Po 'inet \K[\d.]+'
Run Code Online (Sandbox Code Playgroud) 是否可以创建Dockerfile在构建映像时在主机上执行命令?
现在我在做:
./script_that_creates_magic_file.sh
docker build .
Run Code Online (Sandbox Code Playgroud)
使用Dockerfile:
FROM alpine
COPY magic_file
Run Code Online (Sandbox Code Playgroud)
我希望能够做到:
docker build .
Run Code Online (Sandbox Code Playgroud)
使用Dockerfile:
FROM alpine
# invoke script_that_creates_magic_file.sh on the host
COPY magic_file
Run Code Online (Sandbox Code Playgroud)
当然,此脚本与Dockerfile位于同一目录中.
我正在使用Mac OS X上的boot2docker通过docker image包装一些科学软件.该软件(https://github.com/voutcn/megahit.git)正在使用命名管道(在python代码中,但它并不重要)将不同的部分(用C书写)相互连接起来.我从主机Mac OS X机器挂载临时文件夹,在docker容器中提供临时区域(因为软件的临时输出可能很大),如下所示:
docker run -v /external/folder:/tmp/scratch <image> <args>
Run Code Online (Sandbox Code Playgroud)
它给了我在容器内的这个挂载线:
none on /tmp/scratch type vboxsf (rw,nodev,relatime)
Run Code Online (Sandbox Code Playgroud)
在这个挂载的文件夹中,名为管道创建在容器内运行时失败.它甚至与python,C或任何特定语言无关.我mkfifo pipe1在这个文件夹中用linux命令检查了一次错误:
mkfifo: cannot create fifo 'pipe1': Operation not permitted
Run Code Online (Sandbox Code Playgroud)
它适用于容器内任何内部未安装的文件夹.为什么会发生这种情况又如何解决?
PS:这是我轻松重现问题的方法.
1)带有boot2docker的Mac OS X.
2)Dockerfile是:
FROM ubuntu:14.04
#WORKDIR /tmp <- this one would work
WORKDIR /tmp/scratch
ENTRYPOINT [ "mkfifo" ]
CMD [ "pipe1" ]
Run Code Online (Sandbox Code Playgroud)
3)图像构建:
docker build --rm -t mine/namedpipes:latest .
Run Code Online (Sandbox Code Playgroud)
4)运行(在要安装的外部主机文件夹中):
docker run -v $(pwd):/tmp/scratch mine/namedpipes:latest
Run Code Online (Sandbox Code Playgroud) thank you for watching this question.
So my question relates to best practices on how to run a script on a docker-compose up directive.
Currently i'm sharing a volume between host and container to allow for the script changes to be visible to both host and container. Similar to a watching script polling for changes on configuration file.
The script has to act on host on changes according to predefined rules.
So my question is:
How could I start this …
我正在寻找一种方法,使用户能够在主机上执行一组有限的命令,而仅从容器/浏览器访问它。我们的目标是防止主机需要SSH'ing只是运行命令偶尔喜欢make start,make stop等等。这些make命令只是执行一系列的docker-compose命令,并在开发有时需要。
我想到的两种可能方法是:
我正在使用 docker-compose 进行部署。我想从“centos-2”容器重新启动我的“centos-1”容器。两个容器都在同一台主机上运行。请建议,我怎样才能以最简单和自动化的方式实现这一目标?
我遵循了如何从 docker 容器在主机上运行 shell 脚本?并尝试从“centos-2”容器在主机上运行脚本,但该脚本是在容器内而不是在主机上执行的。
脚本:
#!/bin/bash
sudo docker container restart centos-1
Run Code Online (Sandbox Code Playgroud)
错误:
line 2: docker: command not found
Run Code Online (Sandbox Code Playgroud)
(Docker 没有安装在任何 centos-2 容器中)