它显示为两者debian:stable-slim目前debian:stable都已损坏(用于更新):
> $ docker run -ti --rm debian:stable-slim
Unable to find image 'debian:stable-slim' locally
stable-slim: Pulling from library/debian
fc491617b0f1: Pull complete
Digest: sha256:a85c2c0e634946e92a6f4a9a4f6ce5f19ce7c11885bc198f04ab3ae8dacbaffa
Status: Downloaded newer image for debian:stable-slim
root@e610973ac2f8:/# apt update
Ign:1 http://security.debian.org/debian-security stable/updates InRelease
Err:2 http://security.debian.org/debian-security stable/updates Release
404 Not Found [IP: 151.101.130.132 80]
Get:3 http://deb.debian.org/debian stable InRelease [113 kB]
Get:4 http://deb.debian.org/debian stable-updates InRelease [36.8 kB]
Get:5 http://deb.debian.org/debian stable/main amd64 Packages [8178 kB]
Reading package lists... Done
E: The repository 'http://security.debian.org/debian-security stable/updates Release' does …Run Code Online (Sandbox Code Playgroud) 我无法从 docker 容器访问主机私有接口 (ip)。我相当肯定它与我的 Iptables 规则(或者可能是路由)有关。当我将--net=host标志添加到 时docker run,一切都按预期工作。同样,当我指定 INPUT 政策遵循自由主义时-P INPUT ACCEPT,事情也如我所愿。然而,这些是我想避免的不受欢迎和不安全的选择。
由于它不是特定于我的服务 (DNS),因此我已将其排除在问题之外,因为与 docker 结合搜索会在不同的(流行的)问题区域中产生,从而给搜索结果增加噪音。
此外,链接 Docker 容器也不是一个可行的选择,因为某些容器需要使用 --net=host 选项运行,从而阻止链接,我想尽可能创建一致的情况。
我有以下 Iptables 规则。我假设是 CoreOS、Digital Ocean 和 Docker 的组合。
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N DOCKER
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp …Run Code Online (Sandbox Code Playgroud) 我正在使用 portainer 并且无法管理远程端点。我尝试使用命令行连接到远程 docker 节点,但收到一条消息Cannot connect to the Docker daemon at tcp://<remote_ip>:<port>. Is the docker daemon running?。
是的,他们正在奔跑。我已将自己添加到 docker 组,并且可以通过 SSH 连接到节点来访问 docker。但是我无法远程访问任何 docker 节点。
我修改/etc/default为添加/取消注释DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
我还修改/etc/init.d/docker并/etc/init/docker.conf包含DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock".
我重启了docker服务,在这个过程中多次注销和登录,但仍然无法连接到远程节点。我什至无法通过传递 IP 连接到本地节点。
我错过了什么?什么文件中的什么配置通过 TCP 公开 API?
user@hostname:~$ docker -H tcp://<REMOTE_IP>:2375 info
Cannot connect to the Docker daemon at tcp://<REMOTE_IP>:2375. Is the docker daemon running?
user@hostname:~$ docker -H tcp://127.0.0.1:2375 info
Cannot connect …Run Code Online (Sandbox Code Playgroud) 在典型的 dockerfile 中,通常有这一行From ubuntu:16.04可以从 docker 存储库中提取图像。
现在我已经建立了自己的图像存储库:
存储库 URI 是: 1234567890.dkr.ecr.us-west-2.amazonaws.com/mycompany
如上图所示,我将图像推送到服务器。
我运行以下命令以确保我已登录到 ecr
> `aws ecr get-login --region us-west-2`
Flag --email has been deprecated, will be removed in 1.14.
Login Succeeded
Run Code Online (Sandbox Code Playgroud)
ECR 登录完成且没有错误。然后我尝试构建一个新图像:
> docker build -t rtf-converter . -f Dockerfile-rtf-converter
Sending build context to Docker daemon 790.1 MB
Step 1/2 : FROM mycompany:latest
repository mycompany not found: does not exist or no pull access
Run Code Online (Sandbox Code Playgroud)
这是Dockerfile的内容
FROM mycompany:latest
RUN apt-get install chef-zero
Run Code Online (Sandbox Code Playgroud)
在FROM语句中正确指定存储库的正确方法是什么?
我对标签特别困惑。什么是好的标签约定?
从 AWS ec2 实例(运行docker),我正在尝试使用curl我的 docker 容器托管的 Web 服务。
鉴于:
[ec2-user]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b56fa0d76d5c $REGISTRY/$WORK/metrics:v0.1.0 "/bin/sh -c 'sh /root" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp insane_leakey
Run Code Online (Sandbox Code Playgroud)
我可以从容器内访问 Web 服务:
[ec2-user]$ docker exec -it b56fa0d76d5c bash
root@b56fa0d76d5c:/# curl 'http://localhost/health'
Request is missing required query parameter 'apiName'
Run Code Online (Sandbox Code Playgroud)
但是,我无法从主机中找到它:
[ec2-user]$ curl 'http://localhost/health'
curl: (56) Recv failure: Connection reset by peer
Run Code Online (Sandbox Code Playgroud)
我查看了有关此错误的详细答案curl,但不确定如何调试此问题。
当我在 Docker 映像中使用 ubuntu 16.04 和最新的 mysql 5.7.19-0ubuntu0.16.04.1 时,会出现此错误消息。
可以做些什么来解决这个问题?
重现错误
获取Dockerfile:
FROM ubuntu:16.04
RUN apt update
RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server
Run Code Online (Sandbox Code Playgroud)
(也可在此处获得)
构建并运行:
docker build -t mysqlfail .
docker run -it mysqlfail tail -1 /var/log/mysql/error.log
Run Code Online (Sandbox Code Playgroud)
会显示以下错误日志:
2017-08-26T11:48:45.398445Z 1 [警告] root@localhost 是用空密码创建的!请考虑关闭 --initialize-insecure 选项。
这正是我们想要的:一个还没有设置 root 密码的 mysql。
在过去(ubuntu 14.04 / mysql 5.5)aservice mysql start是可能的。现在如果你尝试这个它会失败
docker run -it mysqlfail service mysql start
* Starting MySQL database server mysqld
No directory, logging in with …Run Code Online (Sandbox Code Playgroud)我首先要承认我对 Docker 还很陌生,而且我可能是从错误的假设集来解决这个问题的……如果是这种情况,请告诉我。我已经看到很多关于 Docker 如何用于部署的讨论,但没有关于它实际如何完成的示例。
这是我认为它会起作用的方式:
这里的关键步骤是第 5 步,我认为它会保存当前状态(包括文件系统的内容)。然后,您可以将该状态推送到存储库并从其他地方提取它,从而为您提供一个与原始容器基本相同的新容器。
但它似乎不是这样工作的。我发现要么第 5 步没有做我认为的那样,要么第 7 步(拉取和运行图像)将容器“重置”到它的初始状态。
我把一组三个 Docker 镜像和容器放在一起来测试这个:一个数据容器,一个每 30 秒将一个随机字符串写入数据容器中的文件的写入器,以及一个读取echo数据中的值的读取器容器文件并退出。
创建于
docker run \
--name datatest_data \
-v /datafolder \
myrepository:5000/datatest-data:latest
Run Code Online (Sandbox Code Playgroud)
Dockerfile:
FROM ubuntu:trusty
# make the data folder
#
RUN mkdir /datafolder
# write something to the data file
#
RUN echo "no data here!" > /datafolder/data.txt
# expose …Run Code Online (Sandbox Code Playgroud) 我正在尝试将文件添加到从官方tomcat镜像构建的 Docker镜像中。该图像似乎没有 root 权限,因为tomcat如果我运行 bash ,我以用户身份登录:
docker run -it tomcat /bin/bash
tomcat@06359f7cc4db:/usr/local/tomcat$
Run Code Online (Sandbox Code Playgroud)
如果我指示 aDockerfile将文件复制到该容器,则该文件具有权限644并且所有者为root. 据我了解,这似乎是合理的,因为 Dockerfile 中的所有命令都以 root 身份运行。但是,如果我尝试将该文件的所有权更改为 ,则会tomcat:tomcat出现Operation not permitted错误。
为什么我不能更改复制到该图像的文件的权限?
如何复制:
mkdir docker-addfilepermission
cd docker-addfilepermission
touch test.txt
echo 'FROM tomcat
COPY test.txt /usr/local/tomcat/webapps/
RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt' > Dockerfile
docker build .
Run Code Online (Sandbox Code Playgroud)
的输出docker build .:
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 …Run Code Online (Sandbox Code Playgroud) Docker 有一个缓存,这很棒,但我在“docker build”输出中看到的只是:
---> Using cache
Run Code Online (Sandbox Code Playgroud)
或命令的输出(这意味着它没有使用缓存)。
在我的 Dockerfile 中执行一个步骤(一份 COPY)后,它显然没有使用缓存。但我相当确定它正在复制的文件夹中没有任何变化。(这是我们的应用程序,例如,即使我连续部署两次,我也会遇到无缓存的情况。)
有什么方法可以让 Docker 告诉我它认为发生了什么变化?
我知道 Docker 曾经为此检查时间戳,但这已在 Docker 1.8 中修复,我在这里使用 Docker 1.9.x。
FreeBSD 上的 jails 和 Linux 上的 Docker 之间的主要区别是什么?一个比另一个更安全或更高效吗?Jails 比 Docker 实例更古老,因此可以认为代码本身更安全。但是 Jails 永远不会“流行起来”,所以也许它们不如 Docker 实例好?或者仅仅是因为 Linux 比 FreeBSD 更受欢迎?
docker ×10
amazon-ecr ×1
containers ×1
curl ×1
debian ×1
freebsd ×1
iptables ×1
jail ×1
mysql ×1
networking ×1