将.dockerignore放在哪里?

问题描述 投票:0回答:1

请考虑以下典型的python项目结构:

fooproject 
  - main.py
  - src/
  - test/
  - logs/
  - Dockerfile
  - .dockerignore
  - README.md

。dockerfile应该防止test/logs/目录包含在Docker映像中。

test/
logs/

Dockerfile的内容是

FROM ubuntu16.04

COPY . /app/
WORKDIR /app    
USER root    
RUN pip install -r requirements.txt    
ENTRYPOINT ["main.py"]

但是,当通过PyCharm的自动docker集成运行时,testlogs目录都被复制到了容器中。 PyCharm运行命令最终如下所示:

7eb643d9785b:python -u /opt/project/main.py 

我尝试了一些无济于事的事情,例如在应用程序其余部分上方的目录中复制.dockerignore的副本。例如:

COPY . /app/
COPY .dockerignore .dockerignore
WORKDIR /app

想知道PyCharm的/opt/project是否有某种干扰?因此。dockerignore应该在哪里在这样的项目中?

更新

@@ BMitch建议发布docker container inspect <container name>的输出

[
    {
        "Id": "3f9effbb2e0bd0768fa692ba1665fa78f3b8974af3963f137f40e56a13353dd2",
        "Created": "2020-03-17T15:08:31.438279494Z",
        "Path": "python",
        "Args": [
            "-u",
            "/opt/project/grimlock.py"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 5942,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-03-17T15:08:33.026867235Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:ab427a5dcb775ada4aa911eab240d6e2b20372374cc8b91cec699e878e14e25c",
        "ResolvConfPath": "/var/lib/docker/containers/3f9effbb2e0bd0768fa692ba1665fa78f3b8974af3963f137f40e56a13353dd2/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/3f9effbb2e0bd0768fa692ba1665fa78f3b8974af3963f137f40e56a13353dd2/hostname",
        "HostsPath": "/var/lib/docker/containers/3f9effbb2e0bd0768fa692ba1665fa78f3b8974af3963f137f40e56a13353dd2/hosts",
        "LogPath": "/var/lib/docker/containers/3f9effbb2e0bd0768fa692ba1665fa78f3b8974af3963f137f40e56a13353dd2/3f9effbb2e0bd0768fa692ba1665fa78f3b8974af3963f137f40e56a13353dd2-json.log",
        "Name": "/musing_borg",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/home/adam/Desktop/Dev/ec2-data-analysis/grimlock:/opt/project:rw"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "bridge",
            "PortBindings": null,
            "RestartPolicy": {
                "Name": "",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": [
                "5989fd4331f3fddb73ded0832c214fe8f835427bade88a6d9eb8525c7b17d45a:rw"
            ],
            "CapAdd": null,
            "CapDrop": null,
            "Capabilities": null,
            "Dns": null,
            "DnsOptions": null,
            "DnsSearch": null,
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "shareable",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": null,
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/634ab0ba20ff1c85dec4891de5f2b80f36603182f4863a451182e7f1f0f87b6d-init/diff:/var/lib/docker/overlay2/5f38e55c21502c4b7530406b90b7e0de8c5ad32060d808caea01f2f45c3e1f6d/diff:/var/lib/docker/overlay2/be43c43e429bf90d6a714e2076b18a7e28bc668bcd20652381c9b64ef74c79ca/diff:/var/lib/docker/overlay2/a7180c7e01ecc97ded4664495c9de2a777ebc8cc0dc3a1910fd318fbd25fea40/diff:/var/lib/docker/overlay2/eb43fe827644d365555771aae1272435950b8c1dc0be86a2a0bfd47b2b9d0bd2/diff:/var/lib/docker/overlay2/6c05d16e4be3c9f8c5a7ad5bb276d243d83e870a96e849c57999f43a6f0b021e/diff:/var/lib/docker/overlay2/4a4c9c52a974b4a3a6434bd36810cb6a268092affde7c99e8226bc73ae859575/diff:/var/lib/docker/overlay2/8377b09fd2aedfc6ce1f530050067bc00614444bde70fa80b3e189a838b624f9/diff:/var/lib/docker/overlay2/d450e166a89cf6d0ae0cdccb164de608e520e948d901e5a4ec6381ee5c624e43/diff:/var/lib/docker/overlay2/16c9d3051df305716a8f1c9e187679040a7c897a17987b7721dca7b238f6c8c3/diff:/var/lib/docker/overlay2/d4f536a71c9c77b1be8b334cc237cb421fdef9151a0a497ab3f27ccac35f538c/diff:/var/lib/docker/overlay2/ecf4e19baabb106cc99acde43fb3aaea8f2544c7115c54851f8b13c736f17b91/diff:/var/lib/docker/overlay2/60ef1d11eccba00362b48534bfe1931d69304b590a4d9a9a0edf55f5c3731e6b/diff:/var/lib/docker/overlay2/ff7d5e6ffbaed26a3e61058d07234847fb6307d5079887b4930584bc29957a9c/diff:/var/lib/docker/overlay2/b824b2dec49a05132b37b4dcc74eea2828af14cd8a8a1566b4453639bc691c6a/diff:/var/lib/docker/overlay2/ff97b15aae3c9a5bbe136caf898567e3b1e99f69981ee211e323d37bdd5d136e/diff:/var/lib/docker/overlay2/60dd623cd2b162dcfdd589b242c93549bd3d64c415925f6185f20dcd8d482646/diff:/var/lib/docker/overlay2/5670f6d3e57c0105d5cc5e90efda07c93cb503cdf8c352572a254c0805aeb4c9/diff:/var/lib/docker/overlay2/b4da6e9f680a97514c1799ca2d76e2c000af49bb0ec399120b1162a747efa761/diff:/var/lib/docker/overlay2/6cd105d5d2882cae1f1263c1b02582959ad4348e9063a5aa957e626b2fc4fd3a/diff:/var/lib/docker/overlay2/0b4ec550ae1b0d58e98068cc76f825fc08667f97c8d82028a9f77b1161ea48cf/diff:/var/lib/docker/overlay2/d897eaf7f43a62dc816e6752048c40b30555ddd44c401e6368ab5a7d2f53b015/diff",
                "MergedDir": "/var/lib/docker/overlay2/634ab0ba20ff1c85dec4891de5f2b80f36603182f4863a451182e7f1f0f87b6d/merged",
                "UpperDir": "/var/lib/docker/overlay2/634ab0ba20ff1c85dec4891de5f2b80f36603182f4863a451182e7f1f0f87b6d/diff",
                "WorkDir": "/var/lib/docker/overlay2/634ab0ba20ff1c85dec4891de5f2b80f36603182f4863a451182e7f1f0f87b6d/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/adam/Desktop/Dev/ec2-data-analysis/grimlock",
                "Destination": "/opt/project",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "918611aeb72dc7436c75ef570888c0eabd42d97f6e07ecc82fa613345d058818",
                "Source": "/var/lib/docker/volumes/918611aeb72dc7436c75ef570888c0eabd42d97f6e07ecc82fa613345d058818/_data",
                "Destination": "/opt/.pycharm_helpers",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "3f9effbb2e0b",
            "Domainname": "",
            "User": "root",
            "AttachStdin": true,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": true,
            "StdinOnce": false,
            "Env": [
                "PYTHONPATH=/opt/project:/opt/.pycharm_helpers/pycharm_matplotlib_backend:/opt/.pycharm_helpers/pycharm_display",
                "FLASK_ENV=development",
                "AWS_SECRET_ACCESS_KEY=*****",
                "PYCHARM_HOSTED=1",
                "JETBRAINS_REMOTE_RUN=1",
                "PYTHONIOENCODING=UTF-8",
                "PYCHARM_DISPLAY_PORT=63342",
                "AWS_SECRET=***",
                "AWS_DEFAULT_REGION=us-east-2",
                "AWS_ACCESS_KEY_ID=*****",
                "PYTHONUNBUFFERED=1",
                "PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "LANG=C.UTF-8",
                "GPG_KEY=0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D",
                "PYTHON_VERSION=3.6.9",
                "PYTHON_PIP_VERSION=19.3.1",
                "PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/ffe826207a010164265d9cc807978e3604d18ca0/get-pip.py",
                "PYTHON_GET_PIP_SHA256=b86f36cc4345ae87bfd4f10ef6b2dbfa7a872fbff70608a1e43944d283fd0eee"
            ],
            "Cmd": [
                "python",
                "-u",
                "/opt/project/grimlock.py"
            ],
            "Image": "sha256:ab427a5dcb775ada4aa911eab240d6e2b20372374cc8b91cec699e878e14e25c",
            "Volumes": null,
            "WorkingDir": "/opt/project",
            "Entrypoint": [],
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "c7cfa7a421b6f2d1174543d302437c8701ec87c184efb34c0a0e640cf04e895f",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/c7cfa7a421b6",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "3a8a7eef9c70021e537c03658dc377f28066fd75d18ab8b695011dee318ee510",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "c701911c02826a28b20c5f512052c7960731ee5f63123dd3dcd58e6d57be2d4c",
                    "EndpointID": "3a8a7eef9c70021e537c03658dc377f28066fd75d18ab8b695011dee318ee510",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]
python docker pycharm
1个回答
0
投票

.dockerignore用于控制构建上下文中包含哪些文件。这会影响Dockerfile中的COPYADD命令,并最终影响生成的映像。当您通过卷挂载运行该映像时,例如:

        {
            "Type": "bind",
            "Source": "/home/adam/Desktop/Dev/ec2-data-analysis/grimlock",
            "Destination": "/opt/project",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },

该卷装入将覆盖该容器的映像内容。对路径的所有访问将转到您的桌面目录,而不是映像内容,并且Linux绑定安装没有.dockerignore文件的概念。

当在没有卷挂载的情况下运行此映像时,应该看到不同的行为。

© www.soinside.com 2019 - 2024. All rights reserved.